У меня есть 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, и я могу его отсортировать. Но я не хотел создавать таблицы данных на странице на лету (она входит в модель). Должен ли я определить его в конструкторе наборов данных? Я подумал, что этого будет достаточно для определения отношений в наборе данных.
ОБНОВЛЕНИЕ : я решил мои проблемы с сортировкой, как показано ниже.
С уважением