将绑定到文本框的字段动态更改为ASP.Net GridView

将绑定到文本框的字段动态更改为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="

我有一个用列表填充的gridview。 GridView的列是文本框(作为TemplateField)。 该列表可能包含来自两个不同自定义类的对象,它们要显示的字段不完全相同

对于class1,我需要在GridView中显示:

类别1.姓名

类别1.1

对于class2,我需要在GridView中显示:

类别2.名称

类别2.2

因此,我可以将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>
但这种转换是不允许的


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>