tags:

views:

1169

answers:

2

I have a datagridview in .NET 3.5 needs to display the following columns :

ID, Name, ID2, Name2

This datagridview is binding as follows :

BindingList source = new BindingList(); 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; } }

The problem is that ID2 and Name2 are not showing any value in the datagridview. I have created the columns in Datagridview at design time and the one corresponding to ID2 and Name2 have been assigned the data property as : Class2Ref.ID2 and Class2Ref.Name2

See, at the UI end, it doesnt matter to User that whether the ID2 and Name2 are properties of Class1 or Class2 but at the Entity design level, it does make a difference. Please tell me how can i show 2 properties in a Datagrid which are not available directly in a class but through a reference.

Thanks Kulvinder Singh

+1  A: 

You may see if this works for you (it does for me):

<%@ 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"&gt;
<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>
Darin Dimitrov
+1: Great idea! (0:
KMan
A: 

This is a windows application. Please tell me the solution in that context.