Asp.net 对与其他表相关的GridView列进行排序

Asp.net 对与其他表相关的GridView列进行排序,asp.net,vb.net,gridview,ado.net,sorting,Asp.net,Vb.net,Gridview,Ado.net,Sorting,我有一个绑定到DataView的GridView。 DataView表中的某些列是相关表(f.e.Customer)的外键。我也想为这些列启用排序,但我所能做的只是对foreignkey(fiCustomer)进行排序,而不是对CustomerName进行排序 我尝试过但没有成功(“找不到ERP\u Customer.CustomerName列”): 我必须在DataViewManager的不同表上应用排序,但此表在相关表上会有所不同。 我已将Codebehind中的TemplateColumn

我有一个绑定到DataView的GridView。 DataView表中的某些列是相关表(f.e.Customer)的外键。我也想为这些列启用排序,但我所能做的只是对foreignkey(fiCustomer)进行排序,而不是对CustomerName进行排序

我尝试过但没有成功(“找不到ERP\u Customer.CustomerName列”):

我必须在DataViewManager的不同表上应用排序,但此表在相关表上会有所不同。 我已将Codebehind中的TemplateColumns绑定到RowDataBound事件f.e.:

Dim LblCustomer As Label = DirectCast(e.Row.FindControl("LblCustomer"), Label)
LblCustomer.Text = drCharge.ERP_CustomerRow.CustomerName 'drCharge inherits DataRow
在与其他表相关的列上对GridView排序的建议方法是什么?我可以用customername而不是foreignkey构建一个自定义datatable,并将此列绑定到TemplateField。但是我在模型中的巨大数据集不再有意义了

编辑: 我的问题似乎不清楚或太特殊。 也许我可以用一个更笼统的术语来重新表述它。 我有一个带有数据集的模型。我正在将一个数据表(ERP_费用)从它绑定到我的GridView(实际上我从该表中获取一个数据视图)。此数据表中的列与数据集中的其他数据表相关(定义了关系)。当我想对网格进行排序时,属于ERP\U费用的列没有问题。但无法对包含其他表外键的列进行排序,因为Gridview显示的f.e.不是CustomerID而是Customername。我在RowDataBound中获取客户名称。 通常,我会加入这些表,并为Customername添加一个Datacolumn。然后,我将这个“虚拟”数据表设置为Gridview中的数据源,并能够对其进行排序。但是我不想动态地在页面中创建数据表(它属于模型)我必须在数据集设计器中定义它吗?我认为在数据集中定义关系就足够了


更新:我已经解决了如下排序问题


关于

更新:我通过以下方式解决了排序问题:我更改了模型中的数据集,并将相关表连接到主表(ERP\u费用)。我将要排序的列添加到Datatable(f.e.CustomerName)中。但是我没有将它保存在DataAdapter的配置向导中,因为这样会删除所有更新、删除和插入命令。因此,我仅将SelectCommand更改为向导生成的命令。因此,我保留了数据模型的优点,能够对相关表的列进行排序。由于连接,现在查询可能会稍微慢一点,但它对我有效。

更新:我通过以下方式解决了排序问题:我更改了模型中的数据集,并将相关表连接到主表(ERP费用)。我将要排序的列添加到Datatable(f.e.CustomerName)中。但是我没有将它保存在DataAdapter的配置向导中,因为这样会删除所有更新、删除和插入命令。因此,我仅将SelectCommand更改为向导生成的命令。因此,我保留了数据模型的优点,能够对相关表的列进行排序。由于连接,现在的查询速度可能会稍微慢一些,但这对我来说很有效。

阅读您的问题后,我也遇到了同样的问题。你曾经考虑过使用LINQ来获取对象并将它们作为数据源使用吗?我发现选择一个从多个联接表中获取列的结果非常方便。我必须承认,linq在我的知识中仍然是一个空白。我担心改变我的模型以使用linq以及学习基础知识会花费我太多的时间。但无论如何,谢谢你的建议,我会仔细考虑的。读了你的问题,我也遇到了同样的问题。你曾经考虑过使用LINQ来获取对象并将它们作为数据源使用吗?我发现选择一个从多个联接表中获取列的结果非常方便。我必须承认,linq在我的知识中仍然是一个空白。我担心改变我的模型以使用linq以及学习基础知识会花费我太多的时间。不过还是要谢谢你的建议,我会仔细考虑的。
    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)
Dim LblCustomer As Label = DirectCast(e.Row.FindControl("LblCustomer"), Label)
LblCustomer.Text = drCharge.ERP_CustomerRow.CustomerName 'drCharge inherits DataRow