首页 > 解决方案 > 在 RowEditing 事件处理程序之外访问可编辑的 GridViewRow?

问题描述

在我的gridview中,一旦有一行,RowEditing我想DropDownListOnRowEditing.

我的 gridview 有这两个TemplateField. 两者都有EditItemTemplate一个下拉列表:

<asp:TemplateField HeaderText="Director">
    <ItemTemplate>
        <asp:Label ID="Label_Director" runat="server" Text='<%# Eval("Director").ToString() %>'></asp:Label>
    </ItemTemplate>
    <EditItemTemplate>
        <asp:DropDownList ID="DDL_Director" AutoPostBack="true" OnSelectedIndexChanged="DDL_Director_SelectedIndexChanged" runat="server" DataTextField="Category" DataValueField="Category" />
    </EditItemTemplate>
</asp:TemplateField>

<asp:TemplateField HeaderText="manager">
    <ItemTemplate>
        <asp:Label ID="Label_manager" runat="server" Text='<%# Eval("manager").ToString() %>'></asp:Label>
    </ItemTemplate>
    <EditItemTemplate>
        <asp:DropDownList ID="DDL_manager" AutoPostBack="true" runat="server" DataTextField="Category" DataValueField="Category" />
    </EditItemTemplate>
</asp:TemplateField>

当我编辑一行时,DDL_Director已填充。这按预期工作:

protected void gridview_emps_OnRowEditing(object sender, GridViewEditEventArgs e)
{
    string connString = GetConnString();

    gridview_emps.EditIndex = e.NewEditIndex;

    BindData();

    GridViewRow editingRow = gridview_emps.Rows[e.NewEditIndex];

    DropDownList DDL_Director = (editingRow.FindControl("DDL_Director") as DropDownList);
    DDL_Director.DataSource = GetCategories(connString, "Director");
    DDL_Director.DataBind();
}   

这是问题所在:一旦选择了值,我需要填充下拉列表 DDL_manager DDL_Director。我附在DDL_Director_SelectedIndexChanged. DDL_Director调试器内部中断,DDL_Director_SelectedIndexChanged所以我知道代码正在执行:

protected void DDL_Director_SelectedIndexChanged(object sender, EventArgs e)
    // Access dropdownlist control in RowEditing from here?
    
    //DropDownList DDL_manager = (editingRow.FindControl("DDL_manager") as DropDownList);
    //DDL_manager.DataSource = GetCategories(connString, "manager");
    //DDL_manager.DataBind();

}

问题是我无法从中填充DDL_managerDDL_Director_SelectedIndexChanged因为我无权访问EditingRow.

DDL_Manager问题:在中选择一个值后如何填充DDL_Director

标签: c#asp.netgridview

解决方案


我进行了编辑DDL_Director_SelectedIndexChanged,如下所示:

    protected void DDL_Director_SelectedIndexChanged(object sender, EventArgs e)
    {

        string connString = GetConnString();
        foreach (GridViewRow row in GridView_Emps.Rows)
        {
            if (row.RowType == DataControlRowType.DataRow && (row.RowState & DataControlRowState.Edit) == DataControlRowState.Edit)
            {
                DropDownList DDL_Manager = (row.FindControl("DDL_Manager") as DropDownList);
                DDL_Manager.DataSource = GetCategories(connString, "manager");
                DDL_Manager.DataBind();

            }
        }
    }

推荐阅读