【问题标题】:The GridView fired event RowEditing which wasn't handled when search for specific row搜索特定行时未处理的 GridView 触发事件 RowEditing
【发布时间】:2018-12-19 08:11:56
【问题描述】:

我有一个 2 列的网格视图,一列用于文本框,另一列用于编辑图标。如果我单击编辑图标,它会打开文本框进行编辑,第二列将包含更新图标和取消图标。网格视图上方还有一个搜索文本框,允许用户搜索特定行。

第一种情况:当我有例如 5 行并单击任意行中的编辑图标时,它将打开编辑框,我可以进行编辑。

第二种情况:当我在搜索字段中输入文本并单击搜索按钮时,它将检索相应的行并单独显示在网格视图中。

问题是当我点击该行的编辑图标(搜索结果)时,它显示:GridView 触发了未处理的事件 RowEditing

这是我的网格视图:

<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>

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";
            }                
        } 
    }

【问题讨论】:

  • 看看this tutorial。它涵盖了 GridView 编辑和更新的所有基础知识。
  • @VDWWD 我现在实现了这个教程并放置了一个搜索字段。它始终将搜索结果索引视为 0,因此在编辑时它将打开索引 0 的编辑项,这是 gridview 的第一行!!!!

标签: c# asp.net gridview


【解决方案1】:

只需为 gridview 做一件简单的事情即可触发 RowEditing 事件.... 按照步骤进行

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

【讨论】:

  • gridview的属性中没有事件!
  • 点击属性中的雷霆图标后,您会发现事件,或者只需将其添加到代码中的代码 OnRowUpdating="GridView1_RowUpdating" 并触发此事件
  • 如果你不能这样做,那就从你的链接按钮命令名称中删除 Edit 并使用任何其他名称
  • 如果我删除编辑并更改它的名称,我收到错误,因为调试尝试查找编辑文本框但没有找到它/TextBox txt = row.FindControl("PSBind") as TextBox;
猜你喜欢
  • 2012-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-12
相关资源
最近更新 更多