【发布时间】: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>
<%--<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>
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 的第一行!!!!