在RowEditing事件处理程序之外访问可编辑的GridViewRow ?



在我的gridview中,一旦一行在RowEditing中,我想在OnRowEditing之外的事件处理程序中访问DropDownList

我的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_Director_SelectedIndexChanged填充DDL_manager,因为我没有访问EditingRow

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

我编辑了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();
}
}
}

最新更新