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