2012-08-13 120 views
5

Pregunta simple con respecto a la población de tablas (una sola columna en este caso). Por mucho que parezca una pregunta fácil, nunca he estado involucrado en el área de front-end, así que aquí va.Rellenar una tabla en una página ASP.NET

El diseño es de 2 columnas y 8 filas. Algo así como.

Name  A 
LastName B 
Age   C 
BirthDate D 
... 

Columna 1 son estables, "títulos" si lo desea, eso no cambiará.

A, B, C, D son el resultado de consultas a una base de datos. Por lo tanto, las opciones que se me ocurren son:

  1. dibujar un 2Column - mesa y coloca 8Row cuadros de texto en A, B, C, D ... campos. Luego, pueden completarse con los resultados de la consulta (Esta opción no es la más "bonita" ya que los cuadros de texto alteran el diseño destinado a ser absorbido por toda la página usando archivos .CSS.

  2. Establecer una cuadrícula de datos . el problema aquí es que creo que algunos de los a, B, C, D campos tendrán que ser cambiado para su posterior consulta de uso. Y no estoy seguro de si DataGrids son ment para eso.

¿Hay un "buen camino" para resolver este problema? Gracias de antemano

EDIT.

Los datos A, B, C, D se guardan en un DataSet.

+1

Visual Studio es un IDE que se utiliza con muchos idiomas, ¿de qué estás hablando? Una mesa en qué? ¿Cómo intentas consultarlo? – Oded

+0

@Oded es un proyecto C#/aspx. DB es SQL. Los datos procedentes de SQL que se colocarán en A, B, C, D ... están en un conjunto de datos. –

+0

aspx ... ¿WebForms o MVC? – Oded

Respuesta

7

Para mí, la forma en que estás describiendo los datos en realidad no se presta muy bien para a DataGrid. Este control funciona mejor para los datos que planea mostrar en un estilo tabular estándar, donde los nombres de las columnas se encuentran en la parte superior y luego muestra la (s) fila (s) de valores debajo. Tampoco me queda claro si pretenden vincular una o más instancias de su objeto (que llamaré Person por el momento) a la interfaz de usuario.

Vamos a seguir adelante y definir ese objeto:

public class Person { 
    public String Name { get; set; } 
    public String LastName { get; set; } 
    public int Age { get; set; } 
    public DateTime BirthDate { get; set; } 
} 

para unirse a una sola instancia de Person a su interfaz de usuario, un simple tabla HTML debería funcionar bien. Estoy usando TextBoxes para mostrar los valores aquí, pero si no necesita editarlos, simplemente use Label s en su lugar.

<table> 
    <tr><td>Name:</td><td><asp:TextBox ID="txtName" runat="server" /></td></tr> 
    <tr><td>Last Name:</td><td><asp:TextBox ID="txtLastName" runat="server" /></td></tr> 
    <tr><td>Age:</td><td><asp:TextBox ID="txtAge" runat="server" /></td></tr> 
    <tr><td>Birthdate:</td><td><asp:TextBox ID="txtBirthDate" runat="server" /></td></tr>     
</table> 

Es bastante trivial en este punto para enlazar las propiedades de Person con sus respectivos controles en la página utilizando el código subyacente.

Si desea utilizar este mismo diseño para mostrar varias instancias de Person en una página, vaya con ASP.net Repeater.El margen de beneficio para este se vería más como:

<asp:Repeater ID="repPeople" runat="server"> 
    <ItemTemplate> 
     <table> 
      <tr><td>Name:</td><td><asp:TextBox ID="txtName" runat="server" Text='<%# Eval("Name") %>' /></td></tr> 
      <tr><td>Last Name:</td><td><asp:TextBox ID="txtLastName" runat="server" Text='<%# Eval("LastName") %>' /></td></tr> 
      <tr><td>Age:</td><td><asp:TextBox ID="txtAge" runat="server" Text='<%# Eval("Age") %>' /></td></tr> 
      <tr><td>Birthdate:</td><td><asp:TextBox ID="txtBirthDate" runat="server" Text='<%# String.Format("{0:d}", Eval("BirthDate")) %>' /></td></tr>     
     </table>     
    </ItemTemplate> 
</asp:Repeater> 

En el código subyacente, que acaba de unirse a una colección de Person a la propiedad DataSource en el Repeater:

protected void Page_Load(object sender, EventArgs e) { 

    // A simple example using Page_Load 
    List<Person> people = new List<Person>(); 
    for (int i = 0; i < 10; i++) { 
     people.Add(new Person() {Name = "Test", Age = 10, BirthDate=DateTime.Now, LastName = "Test"}); 
    } 

    if (!IsPostBack) { 
     repPeople.DataSource = people; 
     repPeople.DataBind(); 
    } 

} 

Nota: Usted podría lograr un diseño similar utilizando CSS en lugar de tablas, sin embargo, los mismos principios se aplican entre la vinculación de un solo objeto frente a múltiples. Simplemente reemplace el diseño de la tabla en este ejemplo con cualquier marcado que defina en última instancia.

+0

gracias Mike! será solo una persona y sí, es un objeto como suponía. Creo que puedo usar etiquetas para las células que no cambian, y cuadros de texto para las células que los usuarios pueden modificar mientras trabajan en la página. –

1

Hay un control de tabla en formularios Web que usted debe ser capaz de llenar de un conjunto de datos vea la documentación de MSDN: http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.table.aspx

+0

El segundo ejemplo en el enlace que propone parece una buena manera de completar los datos mediante programación. Entonces debería poder leer los datos modificados por los usuarios para el uso de consultas. Gracias por la visión. –

Cuestiones relacionadas