62,040
社区成员
发帖
与我相关
我的任务
分享
<%@ Page Language="C#" AutoEventWireup="true" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<asp:Repeater runat="server" ID="Repeater1" OnItemDataBound="Repeater1_ItemDataBound">
<ItemTemplate>
<asp:GridView runat="server" ID="GridView1" AutoGenerateColumns="False">
</asp:GridView>
</ItemTemplate>
</asp:Repeater>
</form>
</body>
</html>
<script runat="server">
private class TypeA
{
public string Id { get; set; }
public string FieldA { get; set; }
}
private class TypeB
{
public string Id { get; set; }
public string FieldB1 { get; set; }
public string FieldB2 { get; set; }
}
protected void Page_Load(object sender, EventArgs e)
{
// create test data
var rand = new Random();
Func<int, object> createTypeA = i => new TypeA { Id = "A" + i, FieldA = "ValueA_" + i };
Func<int, object> createTypeB = i => new TypeB { Id = "B" + i, FieldB1 = "ValueB1_" + i, FieldB2 = "ValueB2_" + i };
var testData = Enumerable.Range(1, 3)
.Select(_ => rand.Next(2) == 0 ? createTypeA : createTypeB)
.Select(creator => Enumerable.Range(1, rand.Next(1, 15)).Select(creator).ToArray());
Repeater1.DataSource = testData.ToList();
Repeater1.DataBind();
}
private DataControlField[] ColumnsForTypeA =
{
new BoundField{DataField = "FieldA", HeaderText = "A类属性1"},
};
private DataControlField[] ColumnsForTypeB =
{
new BoundField{DataField = "FieldB1", HeaderText = "B类属性1"},
new BoundField{DataField = "FieldB2", HeaderText = "B类属性2"},
};
protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
var gv = (GridView)e.Item.FindControl("GridView1");
if (((object[])e.Item.DataItem)[0] is TypeA)
ColumnsForTypeA.ToList().ForEach(c => gv.Columns.Add(c));
else
ColumnsForTypeB.ToList().ForEach(c => gv.Columns.Add(c));
gv.DataSource = ((object[])e.Item.DataItem).ToList();
gv.DataBind();
}
</script>