net llenar example ejemplos editar como bootstrap asp c# asp.net gridview

c# - llenar - Vincular ASP.NET 2.0 GridView a mi propio IList<T>.SomeMemberOfMyOwnCustomType.SomeProperty



gridview asp.net c# sql server (3)

Digamos que tengo datos como estos:

class Location { public int Id { get; private set; } public string City { get; set; } public string State { get; set; } public string Country { get; set; } } class Friend { public int Id { get; } public string FriendName { get; set; } public Location Address { get; set; } public int Age { get; set; } public bool IsReliable { get; set; } }

Digamos que unir un control GridView de ASP.NET 2.0 a mi propia IList de esta forma:

GridView1.DataSource = new List<Friend> { new Friend { Name = "...", Age = 22, ... } }; GridView1.DataBind();

Pero quiero tener solo las siguientes columnas en mi GridView con los siguientes subtítulos personalizados / encabezados de columna:

  1. FriendName (Título de columna: nombre de amigo)
  2. Ciudad (Título de la columna: Ciudad)
  3. Edad (Título de columna: Edad)

¿Cómo puedo hacer eso?

En otras palabras, ¿cómo puedo vincular un control GridView a un miembro personalizado de mi propio IList personalizado de forma selectiva?


Algo como esto:

<asp:GridView ID="FriendGridView" runat="server" AutoGenerateColumns="false"> <Columns> <asp:BoundField HeaderText="Friend Name" DataField="FriendName" SortExpression="FriendName" /> <asp:BoundField HeaderText="Age" DataField="Age" SortExpression="Age" /> <asp:BoundField HeaderText="City" DataField="Address.City" SortExpression="Address.City" /> </Columns> </asp:GridView>

Comprueba esto: ASP.NET: GridView y Business Objects


Hace unos años que no toco las cuadrículas de webforms pero IIRC puede hacerlo en el lado de la cuadrícula, usando la notación <Columns> :

<asp:GridView ...> <Columns> <asp:BoundField DataField="FriendName" readonly="true" headertext="Friend Name"/> <asp:BoundField DataField="Address.City" readonly="true" headertext="City"/> <asp:BoundField DataField="Age" readonly="true" headertext="Age"/> </Columns> </asp:GridView>

o use las extensiones IEnumerable / Linq para transformar sus resuls de la siguiente manera:

GridView.DataSource = friends.Select(friend => new { FriendName, City = friend.Address.City, Age });

y cree una notación <Columns> similar para esta nueva salida, también la necesitará para el texto personalizado.

EDITAR: En caso de que DateField = "Address.City" no funcione, existe la opción templateField, con <ItemTemplate> puede simplemente <%# Eval("Address.City") %> en su contenido.


También puede crear las columnas para su grilla y asignarlas en su código en su page_load, llamar a la subrutina generateColumns y luego, una vez que haya terminado, invoque un enlace. GenerateColumns podría verse así:

Private Sub GenerateContactGridColumns() Dim clmName As New BoundField() clmName.DataField = "FriendName" clmName.HeaderText = "Name" Dim clmCity As New BoundField() clmCity.DataField = "City" clmCity.HeaderText = "City" Dim clmEdit As New CommandField() clmEdit.ButtonType = ButtonType.Image clmEdit.EditImageUrl = Me.ThemeImagesPath & "/edit.gif" clmEdit.DeleteImageUrl = Me.ThemeImagesPath & "/delete.gif" clmEdit.ShowEditButton = True clmEdit.ShowDeleteButton = True gvContacts.Columns.Clear() gvContacts.Columns.Add(clmName) gvContacts.Columns.Add(clmCity) gvContacts.Columns.Add(clmEdit) End Sub

Además, normalmente utilizo el marco Entity y entonces la entidad se puede agregar a usar una clase parcial y luego puedo definir una propiedad en la entidad que profundiza en subobjetos. Por ejemplo, un amigo puede tener una propiedad de la ciudad que devuelva address.city.