Сортировать столбец GridView, связанный с другой таблицей - PullRequest
2 голосов
/ 10 июня 2010

У меня есть GridView, связанный с DataView. Некоторые столбцы в таблице DataView являются внешними ключами для связанных таблиц (например, Customer). Я хочу включить сортировку для этих столбцов, но все, что я могу сделать, это сортировать внешний ключ (fiCustomer), а не CustomerName.

Я пробовал это безуспешно («Не удается найти столбец ERP_Customer.CustomerName»):

<asp:TemplateField HeaderText="Customer" SortExpression="ERP_Customer.CustomerName" >

A пробовал также DataViewManager, но у меня проблема с обнаружением таблицы для сортировки:

    Dim daCharge As New ERPModel.dsERPTableAdapters.ERP_ChargeTableAdapter
    daCharge.Fill(dsERP.ERP_Charge)
    Dim viewManager As New DataViewManager(Me.dsERP)
    viewManager.DataViewSettings(dsERP.ERP_Charge).RowFilter = filter
    viewManager.DataViewSettings(dsERP.ERP_Charge).Sort = sort 'sort is the GridView's SortExpression
    Me.GrdCharge.DataSource = viewManager.CreateDataView(dsERP.ERP_Charge)

Я должен применить сортировку к отдельной таблице DataViewManager, но эта таблица будет отличаться для связанных таблиц. Я связал TemplateColumns в Codebehind в RowDataBound-Event f.e.:

Dim LblCustomer As Label = DirectCast(e.Row.FindControl("LblCustomer"), Label)
LblCustomer.Text = drCharge.ERP_CustomerRow.CustomerName 'drCharge inherits DataRow

Каков рекомендуемый способ сортировки GridView по столбцам, связанным с другими таблицами? Я мог бы создать настраиваемую таблицу данных с именем клиента вместо внешнего ключа и связать этот столбец с TemplateField. Но тогда мой огромный набор данных в модели больше не имеет смысла.

EDIT: Похоже, мой вопрос не был ясным или слишком особенным. Возможно, я могу перефразировать это в более общем смысле. У меня есть модель с набором данных. Я привязываю один Datatable (ERP_Charge) из него к моему GridView (на самом деле я беру Dataview из этой таблицы). В этом Datatable столбцы, которые связаны с другими Datatables в наборе данных (отношения определены). Когда я хочу сделать сетку сортируемой, это не проблема для столбцов, принадлежащих ERP_Charge. Но столбцы с внешними ключами другой таблицы не могут быть отсортированы, потому что Gridview показывает f.e. не идентификатор клиента, а имя клиента. Я получаю имя клиента в RowDataBound. Обычно я присоединяюсь к таблицам и добавляю столбец данных для имени клиента. Затем я устанавливаю этот «виртуальный» Datatable как источник данных из Gridview, и я могу его отсортировать. Но я не хотел создавать таблицы данных на странице на лету (она входит в модель). Должен ли я определить его в конструкторе наборов данных? Я подумал, что этого будет достаточно для определения отношений в наборе данных.

ОБНОВЛЕНИЕ : я решил мои проблемы с сортировкой, как показано ниже.

С уважением

1 Ответ

0 голосов
/ 16 июня 2010

ОБНОВЛЕНИЕ : я решил свои проблемы с сортировкой следующим образом: я изменил свой DataSet в модели и соединил связанную таблицу с главной таблицей (ERP_Charge).Я добавил столбцы в таблицу данных (например, CustomerName), которую я хочу отсортировать.Но я сделал это, не сохраняя его в мастере настройки DataAdapter, потому что это удаляло бы все команды Update, Delete и InsertCommands.Следовательно, я изменил только SelectCommand с тем, который был сгенерирован из мастера.Поэтому я сохранил преимущество моей Datamodel с возможностью сортировки по столбцам связанных таблиц.Может быть, запросы теперь немного медленнее из-за объединений, но у меня это работает.

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