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;
}
}
}
}