我有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>
进入代码背后:
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();
}
}
}
调试时,我可以看到调试器进入onrowdatabound。
此时,
e.Row.RowType == DataControlRowType.Header
这个阶段可能正常。因此调试器退出该方法。
我希望调试器在尝试向onrowdatabound
添加行时再次输入DataGrid
。
不管怎样,它都没有,所以Datasource
永远不会被设置,稍后代码会尝试向dropdownlist
添加一个不属于dropdownlist.Items
的值,从而导致执行错误:< / p>
其他信息:'Name' has a SelectedValue which is invalid because it does not exist in the list of items
。
(这是合乎逻辑的,因为dropdownlist.datasource
从未设置过。
调用DG_Table.DataBind()
时,有3行:
protected void B_Fill_Fennec_Click(object sender, EventArgs e)
{
List<fennec> list_fennec = new List<fennec>() { new fennec("Pete", "dev"), new fennec("Jack", "butcher"), new fennec("Steve", "wood chopper"), };
GridView1.DataSource = list_fennec.Select(x => new { Name = x.Name, FieldValue = x.Occupation });
GridView1.DataBind();
}
任何帮助表示赞赏。
答案 0 :(得分:1)
在你的标记中你有这行无效:
<asp:DropDownList ID="Name" runat="server" Text='<%# Bind("Name") %>'></asp:TextBox>
首先,因为您打开了DropDownList
代码并关闭了TextBox
代码。 (我假设在提问和改变代码时这是一个错误。)
其次Text='<%# Bind("Name") %>'
在那里无效(看起来这是TextBox
退化的一半?
我认为您尝试做的是将SelectedValue
的{{1}}设置为Dropdown
这样的Name
:< / p>
Datasource
代码隐藏:
<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>