【发布时间】:2015-03-04 08:45:21
【问题描述】:
我有一个使用 List 填充的网格视图。 GridView 的列是 TextBoxes(作为 TemplateField)。 该列表可能包含来自 2 个不同自定义类的对象,其要显示的字段不完全相同。
对于class1,我需要在GridView中显示:
class1.Name
class1.field1
对于class2,我需要在GridView中显示:
class2.Name
class2.field2
所以我可以将 gridview 设置到 aspx 中,以便它显示 class1 项目:
<asp:GridView ID="DG_Table" runat="server" style="z-index: 1;
autogeneratecolumns="False"
onrowcommand="DG_Table_RowCommand"
<Columns>
<asp:TemplateField HeaderText="Name" >
<ItemTemplate>
<asp:TextBox ID="Name" runat="server" Text='<%# Bind("Name") %>'></asp:TextBox>
</ItemTemplate>
<asp:TemplateField HeaderText="field1" >
<ItemTemplate>
<asp:TextBox ID="field1" runat="server" Text='<%# Bind("field1") %>'></asp:TextBox>
</ItemTemplate>
</Columns>
</asp:GridView>
在 DataGrid 中显示 List<Class1> 可以正常工作。
现在,如果我想将 class2 的项目显示到数据网格中,我将执行以下操作:
DG_Table.DataSource = new List<Class2>;
DG_Table.DataBind();
这显然会导致这种错误: System.Web.dll 中出现“System.Web.HttpException”类型的异常,但未在用户代码中处理
附加信息:DataBinding:“Class2”不包含名为“Field1”的属性。
所以我想,在绑定到 List 之前,我需要将我的第二列转换为后面的代码。 什么相当于
Text='<%# Bind("field1") %>'
进入后面的代码?
我期待这样的事情:
((TextBox)DG_Table.Columns[2]).Text = "";
但是这种转换是不允许的。
提前致谢。
【问题讨论】: