将绑定到文本框的字段动态更改为ASP.Net GridView
我有一个用列表填充的gridview。 GridView的列是文本框(作为TemplateField)。 该列表可能包含来自两个不同自定义类的对象,它们要显示的字段不完全相同 对于class1,我需要在GridView中显示: 类别1.姓名 类别1.1 对于class2,我需要在GridView中显示: 类别2.名称 类别2.2 因此,我可以将gridview设置到aspx中,以便它显示class1项:将绑定到文本框的字段动态更改为ASP.Net GridView,asp.net,gridview,Asp.net,Gridview,我有一个用列表填充的gridview。 GridView的列是文本框(作为TemplateField)。 该列表可能包含来自两个不同自定义类的对象,它们要显示的字段不完全相同 对于class1,我需要在GridView中显示: 类别1.姓名 类别1.1 对于class2,我需要在GridView中显示: 类别2.名称 类别2.2 因此,我可以将gridview设置到aspx中,以便它显示class1项: <asp:GridView ID="DG_Table" runat="
<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>
但这种转换是不允许的
Thx提前。您可以尝试在绑定之前使用
匿名
类型绑定数据。数据将其转换为匿名
类型,然后进行绑定
将栅格视图更改为
<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='<%# Eval("Name") %>'></asp:TextBox>
</ItemTemplate>
<asp:TemplateField HeaderText="field1" >
<ItemTemplate>
<asp:TextBox ID="field1" runat="server" Text='<%# Eval("FieldValue") %>'></asp:TextBox>
</ItemTemplate>
</Columns>
</asp:GridView>
绑定第二个类列表时
gridView1.DataSource = class2List.Select(x=> new{Name = x.Name,FieldValue = x.Field1});
gridview1.DataBind();
您的问题在于它绑定或求值的第二个文本框“field1”,它不是类2中的属性 您可以执行与@code of code answer中提到的相同的操作,也可以更改视图的Create a Model类来绑定它
Class GvItemModel
{
public string Name {get; set;}
public string Field{get; set;}
}
而过去它总是作为数据源
var dataSource = new List<CvItemModel>();
... //Load class1 or Class2 it depends on your choice
更改第二个文本框数据源
<asp:TemplateField HeaderText="field1" >
<ItemTemplate>
<asp:TextBox ID="field1" runat="server" Text='<%# Bind("Field") %>'></asp:TextBox>
</ItemTemplate>
他知道他在寻求解决方案。与其说是回答,不如说是评论。@CoderofCode现在可以了吗?:-)这很有魅力。非常感谢您的快速帮助:-)。
gridView1.DataSource = class2List.Select(x=> new{Name = x.Name,FieldValue = x.Field1});
gridview1.DataBind();
Class GvItemModel
{
public string Name {get; set;}
public string Field{get; set;}
}
var dataSource = new List<CvItemModel>();
... //Load class1 or Class2 it depends on your choice
DG_Table.DataSource = dataSource ;
DG_Table.DataBind();
<asp:TemplateField HeaderText="field1" >
<ItemTemplate>
<asp:TextBox ID="field1" runat="server" Text='<%# Bind("Field") %>'></asp:TextBox>
</ItemTemplate>