我想要一个GridView主从。
Detail中实体的类型可以是不同的类型(每个Master总是相同的类型,以及从同一基类继承的那些类型)
在“详细信息”中,我要具有BaseClass和派生类的属性,因此一个Master的“ Detail”可以具有与另一Master的“ Detail”不同的行数。
我想避免在codeBehind上生成列
我尝试了不同的细节,并通过使用嵌入式代码选择了一个,但是我无法与DataBinding表达式结合使用
<% if(Eval("Type").ToString() == "Type1") { %
CodeOfDetailType1
<% }%>
<% if(Eval("Type").ToString() == "Type2") { %
CodeOfDetailType2
<% }%>
...
我也尝试过将鉴别符保存在HiddenField中(确定)。然后在嵌入式代码中尝试访问该值,但是我不知道如何访问它
答案 0 :(得分:0)
可以使用强类型GridView完成此操作。可以说您有以下课程
public class MasterClass
{
public SubClass1 subClass1 { get; set; }
public SubClass2 subClass2 { get; set; }
}
public class SubClass1
{
public int id { get; set; }
public string name { get; set; }
}
public class SubClass2
{
public int ID { get; set; }
public string NAME { get; set; }
}
然后创建一个MasterClass
的列表并将其绑定到GridView
List<MasterClass> list = new List<MasterClass>();
list.Add(new MasterClass() { subClass1 = new SubClass1() { id = 1, name = "Name 1" } });
list.Add(new MasterClass() { subClass2 = new SubClass2() { ID = 2, NAME = "Name 2" } });
GridView1.DataSource = list;
GridView1.DataBind();
在GridView中添加带有完整名称空间的ItemType
。现在,您可以轻松访问属性。
<asp:GridView ID="GridView1" runat="server" ItemType="YourNameSpace.MasterClass">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<%# Item.subClass1 != null ? Item.subClass1.id : Item.subClass2.ID %>
<%# Item.subClass1 != null ? Item.subClass1.name : Item.subClass2.NAME %>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>