Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   ASPX (.net) (http://www.forosdelweb.com/f78/)
-   -   Enlazar estructura a datagrid (http://www.forosdelweb.com/f78/enlazar-estructura-datagrid-383285/)

u_goldman 03/04/2006 14:29

Enlazar estructura a datagrid
 
Hola chic@s, aqui moléstandolos con una pregunta, soy novato en esto del .NET y la verdad es que me está rompiendo un poco la cabeza, necesito saber cuál es la manera de hacer un Binding a un datagrid a partir de una estructura?

Código:

public struct applicantDetails
{
        public applicantDetails(string question, string answer)
        {
                Question = question;
                Answer = answer;
        }
        public string Question;
        public string Answer;
}

La llamo mas o menos asi:

Código:

//Si encuentro este registro...
if ( item.Get() )
{
        listDataGridApp.Visible = true;
        applicantDetails[] appData = new applicantDetails[26];
        appData[0] = new applicantDetails("Date Applied", item.jobdate.ToString());
.
.
.

listDataGridApp.Visible = true;
listDataGridApp.DataSource = appData;
listDataGridApp.DataBind();

}

Ok, resulta que si hace el binding, pero no veo mis valores :'(

Me muestra en lugar de mis datos, esto:

VisionCMT.Admin.ManageJobApplicant+applicantDetail s :stress:

Mi HTML es el siguiente:
Código:

<asp:DataGrid id="listDataGridApp" CssClass="listtable" Runat="server" UseAccessibleHeader="false" AllowPaging="false" utoGenerateColumns="false">
<Columns>
        <asp:TemplateColumn>
                <ItemTemplate><%# Container.DataItem %></ItemTemplate></asp:TemplateColumn>
</Columns>
</asp:DataGrid>

Cualquie ayuda será enormemente recompensada.

Saludos

xknown 03/04/2006 15:15

Cita:

Iniciado por u_goldman
Ok, resulta que si hace el binding, pero no veo mis valores :'(

Me muestra en lugar de mis datos, esto:

VisionCMT.Admin.ManageJobApplicant+applicantDetail s :stress:

Te muestra eso, porque es lo que devuelve por defecto el método ToString de tu estructura (se llama a éste porque sólo usas Container.DataItem), una forma rápida de cambiar ese comportamiento es sobre-escribiendo el método antes mencionado:
Código:

public override string ToString()
{
    return Question + " -> " + Answer; // o lo que desees mostrar
}

Saludos

u_goldman 03/04/2006 15:23

Cita:

se llama a éste porque sólo usas Container.DataItem
Hola xKnown, gracias por la respuesta...si no quiero sobrecargar este método, cuál sería la forma correcta de trabajar este datagrid?

Saludos

xknown 03/04/2006 16:02

No sé si sea la forma correcta o no, pero podrías usar:

DataBinder.Eval(Container.DataItem, "UnaPropiedad") // Debe ser una propiedad
( (NombreEspacio.applicantDetails) Container.DataItem ) . Answer

Update: En las 2 formas descritas existe, si no me equivoco, un *pequeño* impacto en el rendimiento, ya que al ser applicantDetails una estructura (value type), se hace boxing y unboxing de los valores del arreglo appData, en este caso, creo que sería mejor usar una clase en lugar de una estructura.

Saludos

u_goldman 03/04/2006 16:30

Ok, gracias, vamos a probar! :arriba:

RootK 03/04/2006 20:04

Cita:

Iniciado por xknown
en este caso, creo que sería mejor usar una clase en lugar de una estructura.

De hecho si, cuando personalizas el content para un cualquier objeto que recibe alguna collection, que en este caso es un Array lo mejor es guardar la info sobre tu clase y posteriormente usar un ArrayList que guarde esas referencias para que las reciba tu objeto (en este caso datagrid)

Salu2


La zona horaria es GMT -6. Ahora son las 06:52.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.