Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Datatable对Gridview进行排序_C#_Asp.net_Sorting_Gridview_Datatable - Fatal编程技术网

C# 使用Datatable对Gridview进行排序

C# 使用Datatable对Gridview进行排序,c#,asp.net,sorting,gridview,datatable,C#,Asp.net,Sorting,Gridview,Datatable,我有一个gridview,我想在单击它的任何列标题时对它进行排序。有一个DataTable构建在运行时上,并分配给gridview以填充数据。以下是DataTable和Gridview: DataTable dtMedication = new DataTable(); dtClientMedications.Columns.Add("Id"); dtClientMedications.Columns.Add("BrandName"); dtClientMedications.Columns.A

我有一个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>
DataTable=newdatatable();
dtclientdrughts.Columns.Add(“Id”);
dtclientdrughts.Columns.Add(“BrandName”);
dtclientDrughts.Columns.Add(“GenericName”);
DTClientDrughts.Columns.添加(“剂量”);
DTClientDrughts.Columns.Add(“医师”);
DTClientDrughts.Columns.Add(“日期处方”);
dtclientdrughts.Columns.Add(“Status”);
添加(“ClientMedicationDataId”);
---没有药物存在---

要对网格视图的行进行排序,应使用SortDescription类构造函数,并将两个参数传递给该类,即sortby值和排序方向。有关详细信息,请参阅。

GridView
AllowSorting
属性设置为
true
的第一步,然后为要用于排序的每个列添加
SortExpression
属性:

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

让我们从上面的代码中考虑<代码> Bunfield ,我添加了一个<代码> SoTrimeSt/<代码>属性,值设置为<代码> Brand No.<代码>,这意味着当“代码> Brand Nosis/Cube >的列标题将被点击时,在您的代码>数据表> /代码>中的列“Brand Nead”将用于对数据进行排序:

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

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();
}
如果您注意到我使用了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"];
}
一些有用的链接:


  • 这样做似乎有什么问题?gdvMainList_排序中有什么?我还没有在该事件处理程序中编写任何内容。问题是我不知道如何根据我的网格和DataTable处理该事件我在排序事件处理程序中添加的一段代码是如果(viewState[“SortColumn”]e.SortExpressions)viewState[“sortDirection”]=null;ViewState[“SortColumn”]=e.SortExpression;当您单击其他列时,默认返回ASC