Saya memiliki kontrol GridView yang memiliki 5 bidang terikat yang mengaktifkan pengurutan dan 4 bidang templat. Salah satu kolom template adalah tombol Hapus Gambar yang menghapus baris saat diklik. Sekarang, semuanya baik-baik saja ketika pengguna hanya menggunakan tampilan grid apa adanya, tanpa mengurutkannya. Namun ketika mereka mengurutkannya dan kemudian menekan hapus, argumen perintah menerima informasi baris yang salah dan menghapusnya alih-alih menghapus apa yang mereka pilih untuk dihapus. Ini hanya terjadi pada 2 bidang templat yang memiliki kontrol tombol gambar.
<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>
EDIT-Kode Sumber Data
<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>
Dan metode GridView Sort saya adalah sebagai berikut:
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;
}
}
EDIT-Baris seperti yang dilihat oleh pengguna