Ниже приведена реализация моего события RowDataBound, которое устанавливает значения меток раскрывающихся списков в каждой строке.
protected void GV_Client_RowDataBound(object sender, System.Web.UI.WebControls.GridViewRowEventArgs e) {
DT = (DataTable) ViewState["ClientDT"];
if (e.Row.RowType == DataControlRowType.DataRow && GV_Client.EditIndex == -1) {
Label lblIsActive = (Label) e.Row.FindControl("lblIsActive");
Label lblIsUsedInSLA = (Label) e.Row.FindControl("lblIsUsedInSLA");
if (DT.Rows[count]["IsActive"].ToString().Equals("0")) {
lblIsActive.Text = "InActive";
} else if (DT.Rows[count]["IsActive"].ToString().Equals("1")) {
lblIsActive.Text = "Active";
}
if (DT.Rows[count]["IsUsedInSLA"].ToString().Equals("0")) {
lblIsUsedInSLA.Text = "Not Used";
} else if (DT.Rows[count]["IsUsedInSLA"].ToString().Equals("1")) {
lblIsUsedInSLA.Text = "Used";
}
count++;
}
}
И событие для RowEditing выглядит так:
protected void GV_Client_RowEditing(object sender, System.Web.UI.WebControls.GridViewEditEventArgs e) {
DT = (DataTable) ViewState["ClientDT"];
GV_Client.EditIndex = e.NewEditIndex;
PopulateGrid();
// only retains the dropdown values of Row being edited.
DropDownList ddlIsActive = (DropDownList) GV_Client.Rows[e.NewEditIndex].FindControl("DDLIsActive");
ddlIsActive.SelectedValue = DT.Rows[e.NewEditIndex]["IsActive"].ToString();
DropDownList ddlIsUsedInSLA = (DropDownList) GV_Client.Rows[e.NewEditIndex].FindControl("DDLIsUsedInSLA");
ddlIsUsedInSLA.SelectedValue = DT.Rows[e.NewEditIndex]["IsUsedInSLA"].ToString();
}
Здесь это фрагмент кода ascx:
<asp:TemplateField HeaderText="Active">
<ItemTemplate>
<asp:Label ID="lblIsActive" runat="server" />
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList ID="DDLIsActive" AutoPostBack="true" Value='<%# Eval("IsActive") %>' runat="server">
<asp:ListItem Text="Active" Value="1"></asp:ListItem>
<asp:ListItem Text="InActive" Value="0"></asp:ListItem>
</asp:DropDownList>
</EditItemTemplate>
<FooterTemplate>
<asp:DropDownList ID="DDLIsActiveFooter" runat="server">
<asp:ListItem Text="Active" Value="1"></asp:ListItem>
<asp:ListItem Text="InActive" Value="0"></asp:ListItem>
</asp:DropDownList>
</FooterTemplate>
</asp:TemplateField>
Ранее я передавал свой GridView другим методам, выполняющим операцию вставки / обновления (после RowEditing я мог видеть значения DropDown), оба из этих RowDataBound и OnRowEditing выполнялись отлично, однако, когда я изменил свою реализацию на то, где я извлекал значения из DropDown и Text Fields и сохранял их в переменных, мой код при запуске события OnRowEditing терял значения меток DropDowns, которые я не понимаю, поэтому был бы признателен, если бы кто-то мог помочь.
Примечание: DropDown IsActive сохраняет только 1 или 0 в БД и отображает Active и InActive соответственно.