两个例外:
cs code :(现在只需要在编辑模式下填充下拉列表)
protected void GridView3_RowEditing(object sender, GridViewEditEventArgs e)
{
GridView3.EditIndex = e.NewEditIndex;
ShowData("a"); //bind data
GridViewRow gVR = GridView3.Rows[GridView3.EditIndex];
aspx代码:
<asp:TemplateField HeaderText="x" ItemStyle-CssClass="ix">
<EditItemTemplate>
<asp:DropDownList ID="xnList" runat="server" Text='<%# Bind("[columnx]")%>'>
</asp:DropDownList>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label3" runat="server" Text='<%# Bind("[columnx]") %>'></asp:Label>
</ItemTemplate>
<ItemStyle CssClass="ix" />
</asp:TemplateField>
鉴于上面的代码片段,就在第3行,我得到了以下错误。这是荒谬的,因为同样适用于其他gridview,这个gridview有10行,所以绝对不会超出界限。这可能是什么问题?
参考文献:
修改:
那些慷慨地尝试并且不遗余力地帮助我解决问题的人please check out Jeff Atwood's blog post about Page.FindControl
.阅读它,我觉得我的下拉列表绝对是Gridview中的一个孩子...... Given this post, it comes much closer to what I have encountered.。
但我不是百分百肯定,如果同样的情况适用于我正在努力的事情,因为我有两个网格视图。但是只有一个具有编辑模式控件 - 另一个是普通的 gridvos。有人能告诉我正确的方向吗?
修改: 我已经尝试了以上链接的每个答案/解决方案。截至目前无人工作。
答案 0 :(得分:2)
正如许多人所指出的,RowDataBound()是挂钩数据的正确事件,用于gridview中用于编辑,更新或显示模式的控件。我很绝望,然后尝试了Row_Updating。我不知道错误的问题。
这主要归功于<{1}} ,
Text='<%# Bind("[columnx]")%>'
所以最终的解决方案是根据那里发布的任何答案。
CS:
<asp:DropDownList ID="xnList" runat="server" Text='<%# Bind("[columnx]")%>'>
ASPX:
protected void GridView3_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
if ((e.Row.RowState & DataControlRowState.Edit) == DataControlRowState.Edit)
{
DropDownList ddl = e.Row.FindControlRecursive("dhl") as DropDownList;
DropDownList stageDDL = e.Row.FindControlRecursive("dhl") as DropDownList;
stageDDL.DataSource = this.clservice.Getstuff("someparam");
stageDDL.DataTextField = "columnx";
stageDDL.DataValueField = "columnx";
stageDDL.DataBind();
}
}
}