简体   繁体   中英

The GridView fired event RowEditing which wasn't handled when search for specific row

I have a grid view with 2 columns one for textbox and the other for edit icon. If I click on edit icon, it opened the textbox for editing and the second column will contain update icon and cancel icon. Also there is a search textbox above the gridview to allow the user search for specefic row.

First scenario: when i have for example 5 rows and click on edit icon in any row, it will open the edit box and i can edit.

Second scenario: when i type text in search field and click on search button it will retrieve the corresponding row and display it in the grid view alone.

The problem is When I click on edit icon for this row (search result), it shows: The GridView fired event RowEditing which wasn't handled

This is my gridview:

<asp:GridView ID="PSGridView" runat="server" AutoGenerateColumns="False" DataKeyNames="StatusID" DataSourceID="PSSqlDataSource" ShowFooter="True" BorderStyle="None" BorderWidth="1px" Width="100%" ShowHeaderWhenEmpty="True" EmptyDataText="No protocal status."
  AllowPaging="true" PageSize="10" CssClass="table table-bordered table-striped table-condensed mb-none" AllowSorting="True" OnRowCommand="PSGridView_RowCommand">
  <Columns>
    <%--RP col--%>
      <asp:TemplateField HeaderText="Protocol Status" HeaderStyle-CssClass="caption font-green" HeaderStyle-Width="90%">
        <EditItemTemplate>
          <asp:TextBox ID="PSBind" runat="server" Text='<%# Bind("Des") %>' Width="100%" CssClass="form-control"></asp:TextBox>
        </EditItemTemplate>
        <ItemTemplate>
          <asp:Label ID="PSLabel" runat="server" Text='<%# Bind("Des") %>' Width="100%"></asp:Label>
        </ItemTemplate>
        <FooterTemplate>
          <asp:TextBox ID="PS" runat="server" Width="100%" CssClass="form-control"></asp:TextBox>
        </FooterTemplate>
      </asp:TemplateField>
      <%--Action col--%>

        <asp:TemplateField HeaderText="Actions" HeaderStyle-CssClass="caption font-green" HeaderStyle-Width="10%">
          <ItemTemplate>
            <asp:LinkButton ID="btnEdit" runat="server" CommandName="Edit" Text="Edit" ToolTip="Edit">
              <i class="fa fa-lg fa-pencil"></i></asp:LinkButton>&nbsp;&nbsp;&nbsp;
            <%--<asp:LinkButton ID="btnDelete" runat="server"  CausesValidation="false"  CommandArgument="<%# Container.DataItemIndex %>" CommandName="DeletePS" OnClientClick="return FinalDeleteConfirm(this, event);" Text="Delete" ToolTip="Delete">--%>
              <asp:LinkButton ID="btnDelete" runat="server" CausesValidation="false" CommandArgument="<%# Container.DataItemIndex %>" CommandName="DeletePS" OnClientClick="DeleteConfirm()" Text="Delete" ToolTip="Delete">
                <i class="fa fa-lg fa-trash-o" style="color:red;"></i></asp:LinkButton>
          </ItemTemplate>

          <EditItemTemplate>
            <asp:LinkButton ID="btnUpdate" runat="server" CommandName="UpdatePS" CommandArgument="<%# Container.DataItemIndex %>" Text="Update" ToolTip="Confirm">
              <i class="fa fa-lg fa-check" style="color:green"></i></asp:LinkButton>&nbsp;&nbsp;&nbsp;
            <asp:LinkButton ID="btnCancel" runat="server" CommandName="Cancel" Text="Cancel" ToolTip="Cancel">
              <i class="fa fa-lg fa-times" style="color:red"></i></asp:LinkButton>
          </EditItemTemplate>

          <FooterTemplate>
            <button id="btnAdd" class="btn btn-primary btn-circle" type="button" runat="server" onserverclick="btnAdd_Click">
            <i class="fa fa-plus"></i>
            &nbsp;Add Protocol Status   
            </button>
          </FooterTemplate>
        </asp:TemplateField>
  </Columns>

  <PagerStyle CssClass="pagination-marwa" />
  <SortedAscendingCellStyle BackColor="#FFFDE7" />
  <SortedAscendingHeaderStyle BackColor="#FFF9C4" />
  <SortedDescendingCellStyle BackColor="#FFFDE7" />
  <SortedDescendingHeaderStyle BackColor="#FFF9C4" />
</asp:GridView>

<asp:SqlDataSource ID="PSSqlDataSource" runat="server" ConnectionString="<%$ ConnectionStrings:ProtocolConnectionString %>" SelectCommand="ProtocolStatus_Select" DeleteCommand="ProtocolStatus_Delete" InsertCommand="ProtocolStatus_Insert" UpdateCommand="ProtocolStatus_Update"
  DeleteCommandType="StoredProcedure" InsertCommandType="StoredProcedure" SelectCommandType="StoredProcedure" UpdateCommandType="StoredProcedure">

  <DeleteParameters>
    <asp:Parameter Name="StatusID" Type="Int32" />
  </DeleteParameters>

  <InsertParameters>
    <asp:Parameter Name="Des" Type="String" />
  </InsertParameters>

  <UpdateParameters>
    <asp:Parameter Name="StatusID" Type="Int32" />
    <asp:Parameter Name="Des" Type="String" />
  </UpdateParameters>

</asp:SqlDataSource>

code behind c#:

protected void PSGridView_RowCommand(object sender, GridViewCommandEventArgs e) {
        var exist = 0;            
        if (e.CommandName == "DeletePS" )
        {
            some code
        }

        else if (e.CommandName == "UpdatePS")
        {
            var exist1 = 0;    
            //When update, check if the new name is already exist in the database
            //*******************************************************************
            var index = Convert.ToInt32(e.CommandArgument);

            if (index >= 10)
            {
                index = index % 10;
            }

            var pageSize = PSGridView.PageSize;
            GridViewRow row = PSGridView.Rows[index % pageSize];
            TextBox txt = row.FindControl("PSBind") as TextBox;
            string t = txt.Text;
            exist1 = check_exist(t);

            if (exist1 == 1)
            {
              errorboxactions.Attributes.Add("style", "display:block");
              errormsgactions.InnerHtml = "This name already exist ! type another name";
            }
            //if not exist
            //*************
            else
            {
               PSGridView.UpdateRow(index, true);
               PSGridView.DataBind();

               updateboxactions.Attributes.Add("style", "display:block");
               updatemsgactions.InnerHtml = "Protocol Status has been updated successfully";
            }                
        } 
    }

just do one simple thing fire RowEditing event for gridview.... Follow steps

select gridview
go to properties
select events and then double click on row editing and then run the page again.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM