ฉันมีตัวควบคุม GridView ซึ่งมี 5 ฟิลด์ที่ถูกผูกไว้ซึ่งเปิดใช้งานการเรียงลำดับและ 4 ฟิลด์เทมเพลต ช่องเทมเพลตช่องหนึ่งคือปุ่มลบรูปภาพที่จะลบแถวเมื่อคลิก ตอนนี้ทุกอย่างเป็นไปด้วยดีเมื่อผู้ใช้เพียงแค่ใช้ gridview เหมือนเดิมโดยไม่ต้องเรียงลำดับ แต่เมื่อพวกเขาเรียงลำดับแล้วกดลบ อาร์กิวเมนต์คำสั่งจะได้รับข้อมูลแถวที่ไม่ถูกต้องและลบออกแทนที่จะลบสิ่งที่พวกเขาเลือกที่จะลบ สิ่งนี้เกิดขึ้นเฉพาะกับฟิลด์เทมเพลต 2 ช่องที่มีปุ่มควบคุมรูปภาพ
<Columns>
<asp:BoundField DataField="AccountNo" HeaderText="Account No"
SortExpression="AccountNo" />
<asp:BoundField DataField="Address" HeaderText="Address"
SortExpression="Address" />
<asp:BoundField DataField="City" HeaderText="City" SortExpression="City" />
<asp:BoundField DataField="Name" HeaderText="Name"
SortExpression="Name" />
<asp:BoundField DataField="State" HeaderText="State" SortExpression="State" />
<asp:BoundField DataField="Zip" HeaderText="Zip" SortExpression="Zip" />
<asp:BoundField DataField="Utility" HeaderText="Utility"
SortExpression="Utility" />
<asp:TemplateField HeaderText="Edit">
<ItemTemplate>
<asp:HyperLink runat="server" ID="EditLink" ToolTip="Edit Account" NavigateUrl='<%# GetEditURL(((BillingEntity)Container.DataItem).Id) %>' >
<img src="../img/edit.png" border="0"/>
</asp:HyperLink>
</ItemTemplate>
<ItemStyle HorizontalAlign="Center"></ItemStyle>
</asp:TemplateField>
<asp:TemplateField HeaderText="Enable/Disable" >
<ItemTemplate>
<asp:ImageButton runat="server" ID="DisableButton" ImageUrl = "../img/delete.png" ToolTip="Disable Account" CommandName="Disable_Account" CommandArgument='<%#((BillingEntity)Container.DataItem).Id %>' OnClientClick="if (confirm('Are you sure you want to disable this account?')==false) {return false;}" Visible='<%# ShowDisableButton(((BillingEntity)Container.DataItem).Status)%>'/>
<asp:ImageButton runat="server" ID="EnableButton" ImageUrl = "../img/add.png" ToolTip="Enable Account" CommandName="Enable_Account" CommandArgument='<%#((BillingEntity)Container.DataItem).Id %>' Visible='<%# ShowEnableButton(((BillingEntity)Container.DataItem).Status)%>'/>
</ItemTemplate>
<ItemStyle HorizontalAlign="Center"></ItemStyle>
</asp:TemplateField>
<asp:TemplateField HeaderText="Delete" >
<ItemTemplate>
<asp:ImageButton runat="server" ID="Delete" ImageUrl = "../img/cross.png" ToolTip="Delete Account" CommandName="Delete_Account" CommandArgument='<%#((BillingEntity)Container.DataItem).Id %>' OnClientClick="if (confirm('Invoices associated with this account will be deleted permanently. Are you sure you want to delete this account?')==false) {return false;}" />
</ItemTemplate>
<ItemStyle HorizontalAlign="Center"></ItemStyle>
</asp:TemplateField>
<asp:TemplateField HeaderText="View Invoices" ItemStyle-HorizontalAlign="Center">
<ItemTemplate>
<asp:HyperLink runat="server" ID="ViewInvoiceLink" ToolTip="Recent invoices" NavigateUrl='<%# GetViewInvoiceURL(((BillingEntity)Container.DataItem).Id) %>' >
<img src="../img/go.png" border="0"/>
</asp:HyperLink>
</ItemTemplate>
<ItemStyle HorizontalAlign="Center"></ItemStyle>
</asp:TemplateField>
<asp:TemplateField HeaderText="Submit Invoice" ItemStyle-HorizontalAlign="Center">
<ItemTemplate>
<asp:HyperLink runat="server" ID="InvoiceLink" ToolTip="Submit invoice" NavigateUrl='<%# GetSubmitInvoiceURL(((BillingEntity)Container.DataItem).Id) %>' >
<img src="../img/go.png" border="0"/>
</asp:HyperLink>
</ItemTemplate>
<ItemStyle HorizontalAlign="Center"></ItemStyle>
</asp:TemplateField>
</Columns>
แก้ไข-โค้ดแหล่งข้อมูล
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
SelectMethod="GetAllEntities"
TypeName="DataAccessLayer.Repository.BillingEntityRepository">
<SelectParameters>
<asp:QueryStringParameter DefaultValue="-1" Name="clientId"
QueryStringField="clientId" Type="Int32" />
<asp:Parameter DefaultValue="Name" Name="sortColumn" Type="String" />
<asp:Parameter DefaultValue="ASC" Name="sortOrder" Type="String" />
</SelectParameters>
</asp:ObjectDataSource>
และวิธีการจัดเรียง GridView ของฉันเป็นดังนี้:
protected void GridView_BillingEntity_Sorting(object sender, GridViewSortEventArgs e)
{
if (ObjectDataSource1.SelectParameters.Count == 3)
{
ObjectDataSource1.SelectParameters[1].DefaultValue = e.SortExpression.ToString();
ObjectDataSource1.SelectParameters[2].DefaultValue = GetSortDirection(e.SortExpression);
GridView_BillingEntity.DataBind();
e.Cancel = true;
}
}
แก้ไข-แถวตามที่ผู้ใช้เห็น