2012-02-02 16 views
5

Tengo una lista que estoy vinculando a un GridView, por lo tanto, mi GridView tendrá solo una columna de estos valores de cadena. Quiero tener un encabezado de texto adecuado para esta columna. Por favor, ayúdame. Ver lo que he intentado hacer:Encuadernación GridView con List of Strings

<asp:GridView ID="GridView1" runat="server" Width="95%"> 

<Columns> 

<asp:BoundField HeaderText="My List" /> 

</Columns> 

</asp:GridView> 

Y en código detrás:

List<string> myList = new List<string>(); 

: 

: 

// code to populate myList 

: 

: 

GridView1.DataSource = myList; 

GridView1.DataBind(); 

Cuando ejecuta este código, consigo dos columnas en el GridView. Primera columna con texto de encabezado como "Mi Lista" y con filas en blanco, mientras que la segunda columna tiene texto de encabezado como "Artículo" y tiene filas con valores myList. Quiero tener solo una columna en mi GridView que tenga texto de encabezado como "Mi lista" y filas con los valores del objeto myList.

Gracias

+0

quizás 'GridView1.DataSource = myList.ToArray();' haría? – Igarioshka

+0

Hola Nishit Cambiar el texto del encabezado después de enlazar Gridview, entonces funciona verifica el código que publiqué. – Vinod

Respuesta

-1

método 1:

hacer auto generar columnas propiedad verdadera

<asp:GridView ID="GridView1" runat="server" Width="95%" autogeneratecolumns = "true"> 

</asp:GridView> 

Método 2:

hacer auto generar columnas propiedad falsa

<asp:GridView ID="GridView1" runat="server" Width="95%"> 
    <Columns> 
    <asp:BoundField HeaderText="My List" /> 
    </Columns> 
</asp:GridView> 
+0

método 2 no funciona: parece que no puede hacer que 'BoundField' funcione sin un valor válido de" DataField ". – pseudocoder

1

Agregar AutoGenerateColumns="false" para deshabilitar la segunda columna; No estoy seguro de cómo vincularía una matriz de cadenas; dado que genera un ítem, tal vez agregue DataField="Item" a la definición de su grilla. O bien, vincular a un objeto anónimo:

this.gvw.DataSource = mylist.Select(i => new { Data = i }); 

Y a continuación, en su columna enlazada, especifique Datos como el campo de texto.

La opción 3 es dejar el AutoGenerateColumns="true" (el valor predeterminado) y eliminar su columna.

+0

FYI, 'Datafield =" Item "' no funciona. Terminé usando la proyección linq, que funciona muy bien. No se pudieron generar columnas automáticamente porque quiero aplicar un ItemStyle en la definición de mi Columna. – pseudocoder

3

O puede hacerlo de esta manera:

Aspx:

<asp:GridView ID="gv" runat="server" AutoGenerateColumns="false"> 
    <Columns> 
     <asp:BoundField DataField="test" HeaderText="Text" /> 
    </Columns> 
</asp:GridView> 

Código:

var ls=new List<string>(); 
ls.Add("Test"); 
ls.Add("Test2"); 
gv.DataSource=ls.Select (l =>new{test=l}); 
0

Usted puede hacer esto mediante programación en caso RowDataBound.

protected void GridView_MyList_RowDataBound(object sender, GridViewRowEventArgs e) 
     { 
      if (e.Row.RowType == DataControlRowType.Header) 
      { 
       ((Label)e.Row.Cells[1].Controls[0]).Text = "My List"; 
      } 
     } 

Y tu control GridView será como

<asp:GridView ID="GridView_MyList" runat="server" 
Width="800px" OnRowDataBound="GridView_MyList_RowDataBound"></asp:GridView> 
0

Prueba esto:

<asp:GridView ID="GridView1" runat="server"> 
</asp:GridView> 


List<string> l = new List<string>(); 
      l.Add("computer"); 
      l.Add("laptop"); 
      l.Add("palmtop"); 

      GridView1.DataSource = l; 
      GridView1.DataBind(); 
      GridView1.HeaderRow.Cells[0].Text = "My List"; 
0

Conjunto de cuadrícula AutoGenerateColumns="false"

0

solo use el Contenedor.DataItem

.cs

List<string> myList = new List<string>(); 
GridView1.DataSource = myList ; 
GridView1.DataBind(); 

.aspx

<asp:gridview ID="GridView1" runat="server"> 
     <Columns> 
     <asp:TemplateField> 
      <ItemTemplate> 
       <asp:Label ID="nasdc" runat="server" Text=<%# Container.DataItem %>></asp:Label> 
      </ItemTemplate> 
     </asp:TemplateField> 
     </Columns> 

http://forums.asp.net/t/1050997.aspx?How+to+bind+a+GridView+to+a+List+string+

1

Creo que la siguiente información le dará los resultados que usted está buscando:

 <asp:gridview id="MyGridView" runat="server" showheaderwhenempty="true" autogeneratecolumns="false" runat="server"> 
     <Columns> 
      <asp:TemplateField HeaderText="My List"> 
      <ItemTemplate> 
       <asp:Label ID="Column1" runat="server" Text=<%# Container.DataItem %>></asp:Label> 
      </ItemTemplate> 
     </asp:TemplateField> 
     </Columns> 
     </asp:gridview>