2008-12-16 6 views
1

J'ai un datagridview dans .NET 3.5 qui a besoin d'afficher les colonnes suivantes:datagridview + Object liaison personnalisée

ID, nom, ID2, Nom2

Cette datagridview lie comme suit:

BindingList<Class1> source = new BindingList<Class1>(); 
source.Add(new Class1 { ID = "1", Name = "Test", Class2Ref = new Class2 { ID2 = "Class2 ID" , Name2 = "Class2 Name"} }); 
dataGridView1.DataSource = source; 


public class Class1 
{ 
    public string ID 
    { 
     get; 
     set; 
    } 

    public string Name 
    { 
     get; 
     set; 
    } 

    public Class2 Class2Ref 
    { 
     get; 
     set; 
    } 
} 


public class Class2 
{ 
    public string ID2 
    { 
     get; 
     set; 
    } 

    public string Name2 
    { 
     get; 
     set; 
    } 
} 

Le problème est que ID2 et Name2 n'affichent aucune valeur dans la vue de données. J'ai créé les colonnes dans Datagridview au moment du design et celui qui correspond à ID2 et Nom2 a été assigné la propriété de données comme: Class2Ref.ID2 et Class2Ref.Name2

Voir, à l'extrémité de l'interface utilisateur, il ne compte pas à l'utilisateur que Si ID2 et Name2 sont des propriétés de Class1 ou Class2 mais au niveau de la conception Entity, cela fait une différence. S'il vous plaît dites-moi comment puis-je montrer 2 propriétés dans un Datagrid qui ne sont pas disponibles directement dans une classe mais à travers une référence.

Répondre

1

Vous pouvez voir si cela fonctionne pour vous (il fait pour moi):

<%@ Page Language="C#" AutoEventWireup="true"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<script runat="server"> 
    public class Class1 
    { 
     public string ID { get; set; } 
     public string Name { get; set; } 
     public Class2 Class2Ref { get; set; } 
    } 

    public class Class2 
    { 
     public string ID2 { get; set; } 
     public string Name2 { get; set; } 
    } 

    void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      myGrid.DataSource = new[] 
      { 
       new Class1() 
       { 
        ID = "1", 
        Name = "Name1", 
        Class2Ref = new Class2() 
        { 
         ID2 = "IDRef1", 
         Name2 = "NameRef1" 
        } 
       }, 
       new Class1() 
       { 
        ID = "2", 
        Name = "Name2", 
        Class2Ref = new Class2() 
        { 
         ID2 = "IDRef2", 
         Name2 = "NameRef2" 
        } 
       } 
      }; 
      myGrid.DataBind(); 
     } 
    } 
</script> 
<html xmlns="http://www.w3.org/1999/xhtml" > 
<head id="Head1" runat="server"> 
    <title>Untitled Page</title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     <asp:DataGrid runat="server" ID="myGrid" AutoGenerateColumns="false"> 
      <Columns> 
       <asp:TemplateColumn> 
        <HeaderTemplate> 
         ID 
        </HeaderTemplate> 
        <ItemTemplate> 
         <%# Eval("ID") %> 
        </ItemTemplate> 
       </asp:TemplateColumn> 
       <asp:TemplateColumn> 
        <HeaderTemplate> 
         Name 
        </HeaderTemplate> 
        <ItemTemplate> 
         <%# Eval("Name") %> 
        </ItemTemplate> 
       </asp:TemplateColumn> 
       <asp:TemplateColumn> 
        <HeaderTemplate> 
         ID2 
        </HeaderTemplate> 
        <ItemTemplate> 
         <%# Eval("Class2Ref.ID2") %> 
        </ItemTemplate> 
       </asp:TemplateColumn> 
       <asp:TemplateColumn> 
        <HeaderTemplate> 
         Name2 
        </HeaderTemplate> 
        <ItemTemplate> 
         <%# Eval("Class2Ref.Name2") %> 
        </ItemTemplate> 
       </asp:TemplateColumn> 
      </Columns> 
     </asp:DataGrid> 
    </div> 
    </form> 
</body> 
</html> 
+0

+1: Excellente idée! (0: –