使用Datatable对Gridview进行排序

asm*_*sma 3 c# asp.net sorting datatable gridview

我有一个gridview,我想在点击任何列标题时进行排序.DataTable是在运行时构建的,并分配给gridview来填充数据.这是DataTable和Gridview:

DataTable dtMedication = new DataTable();
dtClientMedications.Columns.Add("Id");
dtClientMedications.Columns.Add("BrandName");
dtClientMedications.Columns.Add("GenericName");
dtClientMedications.Columns.Add("Dosage");
dtClientMedications.Columns.Add("Physician");
dtClientMedications.Columns.Add("DatePrescribed");
dtClientMedications.Columns.Add("Status");
dtClientMedications.Columns.Add("ClientMedicationDataId");

<asp:GridView ID="gdvMainList" runat="server" AutoGenerateColumns="False"
                            SkinID="PagedGridView" onrowcommand="gdvMainList_RowCommand" 
                            DataKeyNames="Id" onsorting="gdvMainList_Sorting">
                            <PagerStyle CssClass="gridpager" HorizontalAlign="Right" />
                            <Columns>
                                <ucc:CommandFieldControl HeaderText="Actions" ShowDeleteButton="true" ButtonType="Image"
                                    DeleteImageUrl="~/App_Themes/Default/images/delete.png" ShowEditButton="true"
                                    EditImageUrl="~/App_Themes/Default/images/edit.png" DeleteConfirmationText="Are you sure you want to delete?">
                                    <ItemStyle HorizontalAlign="Center" Width="60px" />
                                </ucc:CommandFieldControl>
                                <asp:BoundField DataField="BrandName" HeaderText="Brand Name" />
                                <asp:BoundField DataField="GenericName" HeaderText="Generic Name" />
                                <asp:BoundField DataField="Dosage" HeaderText="Dosage" />
                                <asp:BoundField DataField="Physician" HeaderText="Physician" />
                                <asp:BoundField DataField="DatePrescribed" HeaderText="Date Prescribed" />
                                <asp:BoundField DataField="Status" HeaderText="Status" />
                                <asp:TemplateField HeaderText="">
                                    <ItemStyle CssClass="HiddenCol" Width="0px" />
                                    <HeaderStyle CssClass="HiddenCol" />
                                    <ItemTemplate>
                                        <asp:HiddenField ID="hdfClientMedicationDataId" runat="server" Value='<%#Bind("ClientMedicationDataId") %>' />
                                    </ItemTemplate>
                                </asp:TemplateField>
                            </Columns>
                            <EmptyDataTemplate>
                                <div class="divEmptyGrid">
                                    --- No Medication Exists ---
                                </div>
                            </EmptyDataTemplate>
                        </asp:GridView>
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

Waq*_*qas 9

第一步,设置AllowSorting属性GridView,以true再加入SortExpression你会用于排序各列属性:

SortExpression属性指示在单击该字段的排序标题链接时应该用于对数据进行排序的表达式

让我们BoundField从上面的代码中考虑,我已经添加了一个SortExpression值设置为的属性,BrandName这意味着当BrandName单击列标题时,您的"BrandName"列DataTable将用于对数据进行排序:

现在,gdvMainList_Sorting您必须将网格重新绑定到已排序的数据:

protected void gdvMainList_Sorting(object sender, System.Web.UI.WebControls.GridViewSortEventArgs e)
{
    //Using DataView for sorting DataTable's data
    DataView view = dtMedication.DefaultView;
    view.Sort = String.Format("{0} {1}", e.SortExpression, GetSortingDirection());
    gdvMainList.DataSource = view;
    gdvMainList.DataBind();
}
Run Code Online (Sandbox Code Playgroud)

如果你注意到我使用了getSortingDirection(),这个方法返回'ASC'或'DESC',分别按升序或降序排序数据.

protected string GetSortingDirection() 
{
    if(ViewState["SortDirection"] == null)
        ViewState["SortDirection"] = "ASC";
    else if(ViewState["SortDirection"] == "ASC")
        ViewState["SortDirection"] = "DESC";
    else
        ViewState["SortDirection"] = "ASC";

    return ViewState["SortDirection"];
}
Run Code Online (Sandbox Code Playgroud)

一些有用的链接:

  1. 使用VB.net进行GridView排序
  2. 排序和分页教程