Как выполнить RowDataBound после того, как событие RowEditing было запущено? Я получаю пустые значения DropDowns в каждой строке - PullRequest
0 голосов
/ 30 марта 2020

Ниже приведена реализация моего события 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 соответственно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...