dropdownlist到ASP.Net GridView中未正确绑定

dropdownlist到ASP.Net GridView中未正确绑定,asp.net,gridview,Asp.net,Gridview,我有一个GridView和一个DropDownList。 需要将DropDownList项设置到代码隐藏中。 我查看了在线代码示例,看起来我应该这样编码: <asp:GridView ID="DG_Table" runat="server" style="z-index: 1;autogeneratecolumns="False" onrowcommand="DG_Table_RowCommand" onrowdatabound="onrowdatabound">

我有一个
GridView
和一个
DropDownList
。 需要将
DropDownList
项设置到代码隐藏中。 我查看了在线代码示例,看起来我应该这样编码:

<asp:GridView ID="DG_Table" runat="server" style="z-index: 1;autogeneratecolumns="False" 
onrowcommand="DG_Table_RowCommand"  
onrowdatabound="onrowdatabound">  

   <Columns>
     <asp:TemplateField HeaderText="Name" >
      <ItemTemplate>
         <asp:DropDownList ID="Name" runat="server" Text='<%# Bind("Name") %>'></asp:TextBox>
      </ItemTemplate>
   <asp:TemplateField HeaderText="field1" >
      <ItemTemplate>
        <asp:TextBox ID="field1" runat="server" Text='<%# Eval("FieldValue") %>'></asp:TextBox>
     </ItemTemplate>
 </Columns>
 </asp:GridView>

谢谢你的帮助

在标记中有以下无效行:

<asp:DropDownList ID="Name" runat="server" Text='<%# Bind("Name") %>'></asp:TextBox>
代码隐藏:

public void onrowdatabound(object sender, GridViewRowEventArgs e)
{

    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        //check if is in edit mode
        if ((e.Row.RowState & DataControlRowState.Edit) > 0)
        {
               DropDownList dropdownlist = DropDownList)e.Row.FindControl("Name");
               dropdownlist.DataSource = new List<string>() { "Pete", "Jack", "Steve", "Mike", "Rob", "Jim", "Eric" };
               dropdownlist.DataBind();
               var nameField = e.Row.FindControl("hdn_Name") as HiddenField;
               if(nameField != null)
               {
                   dropdownlist.SelectedValue = nameField.Value;
               }
        }
    }
 }
public void onrowdatabound(对象发送方,GridViewRowEventArgs e)
{
如果(e.Row.RowType==DataControlRowType.DataRow)
{
//检查是否处于编辑模式
如果((e.Row.RowState和DataControlRowState.Edit)>0)
{
DropDownList DropDownList=DropDownList)e.Row.FindControl(“名称”);
dropdownlist.DataSource=新列表(){“Pete”、“Jack”、“Steve”、“Mike”、“Rob”、“Jim”、“Eric”};
dropdownlist.DataBind();
var nameField=e.Row.FindControl(“hdn_Name”)作为HiddenField;
if(nameField!=null)
{
dropdownlist.SelectedValue=nameField.Value;
}
}
}
}

这是打字错误吗?或者这就是它的编码方式?style=“z-index:1;autogeneratecolumns=“False“如果没有为每一行触发onrowdatabound,那么您提供的数据源可能有问题。能否尝试将LINQ查询结果转换为列表,并将其用作数据源。Thx用于更正。事实上,我没有匹配DropDownList和TextBox,不得不删除文本字段。你的解决方案几乎对我有效。我仍然对这行有一个问题:dropdownlist.SelectedValue=nameField.Value;它总是返回列表的第一项(本例中为Pete)。此行可能有问题吗?请尝试删除此if语句:
if((e.Row.RowState&DataControlRowState.Edit)>0)
。我认为这不属于这里的数据绑定?是的,我已经删除了它,但仍然提到了这个问题:
code-dropdownlist.SelectedValue=nameField.Value始终拾取数据源列表的第一项发现错误:)我复制粘贴了您的代码。有一个输入错误:
code-value='Eval(“Name”)'
而不是
code-value='
一旦修复,它就会按预期工作。非常感谢您在这个问题上的帮助。没问题-我已经编辑了答案来更正这个错误。你能把这个标记为答案吗?这样它就可以在必要时帮助别人了。
<asp:DropDownList ID="Name" runat="server" Text='<%# Bind("Name") %>'></asp:TextBox>
<asp:GridView ID="DG_Table" runat="server" style="z-index: 1;autogeneratecolumns="False" 
onrowcommand="DG_Table_RowCommand"  
onrowdatabound="onrowdatabound">  

   <Columns>
     <asp:TemplateField HeaderText="Name" >
      <ItemTemplate>
         <asp:HiddenField id="hdn_Name" runat="server" value='<%# Eval("Name") %>' />
         <asp:DropDownList ID="Name" runat="server" />
      </ItemTemplate>
   <asp:TemplateField HeaderText="field1" >
      <ItemTemplate>
        <asp:TextBox ID="field1" runat="server" Text='<%# Eval("FieldValue") %>'></asp:TextBox>
     </ItemTemplate>
 </Columns>
 </asp:GridView>
public void onrowdatabound(object sender, GridViewRowEventArgs e)
{

    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        //check if is in edit mode
        if ((e.Row.RowState & DataControlRowState.Edit) > 0)
        {
               DropDownList dropdownlist = DropDownList)e.Row.FindControl("Name");
               dropdownlist.DataSource = new List<string>() { "Pete", "Jack", "Steve", "Mike", "Rob", "Jim", "Eric" };
               dropdownlist.DataBind();
               var nameField = e.Row.FindControl("hdn_Name") as HiddenField;
               if(nameField != null)
               {
                   dropdownlist.SelectedValue = nameField.Value;
               }
        }
    }
 }