Сортировка Gridview с использованием Datatable - PullRequest
3 голосов
/ 06 сентября 2011

У меня есть сетка, которую я хочу отсортировать, если щелкнуть любой заголовок столбца. Существует 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>

enter image description here

Ответы [ 2 ]

9 голосов
/ 06 сентября 2011

Первый шаг для установки 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();
}

Если вы заметили, я использовал 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"];
}

Некоторые полезные ссылки:

  1. Сортировка GridView с использованием VB.net
  2. Учебник по сортировке и подкачке
0 голосов
/ 06 сентября 2011

Для сортировки строк вида сетки вы должны использовать конструктор класса SortDescription и передать этому классу два аргумента, а именно: значение sortby, а также направление сортировки.Обратитесь к Сортировать решетки на основе столбца нажмите для получения более подробной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...