【问题标题】:Sort a GridView Column related to other Table对与其他表相关的 GridView 列进行排序
【发布时间】:2010-06-10 11:02:00
【问题描述】:

我有一个绑定到 DataView 的 GridView。 DataView 表中的某些列是相关表(例如客户)的外键。我也想为这些列启用排序,但我所能做的就是排序外键(fiCustomer)而不是CustomerName。

我试过这个没有成功(“找不到列 ERP_Customer.CustomerName”):

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

我也尝试了 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 的不同表上应用排序,但该表在相关表上会有所不同。 我已经在 RowDataBound-Event f.e. 中绑定了 Codebehind 中的 TemplateColumns:

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

在与其他表相关的列上对 GridView 进行排序的推荐方法是什么?我可以使用客户名而不是外键构建自定义数据表,并将此列绑定到 TemplateField。但后来我在模型中的庞大数据集就没有意义了。

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

更新:我已经解决了我的排序问题,如下所示。

问候

【问题讨论】:

  • 阅读您的问题并遇到同样的问题。你有没有考虑过使用 Linq 来取回对象并将它们用作数据源?我发现选择从多个连接表中获取列的结果非常方便。
  • 我必须承认 linq 在我的知识上仍然存在差距。恐怕我会花费太多时间来改变我的模型以使用 linq,当然还要学习基础知识。不过还是谢谢你的建议,我会考虑的。

标签: asp.net vb.net gridview ado.net sorting


【解决方案1】:

更新:我通过以下方式解决了我的排序问题:我更改了模型中的数据集并将相关表加入到主表(ERP_Charge)中。我将列添加到要排序的数据表(例如 CustomerName)中。但我没有将其保存在 DataAdapter 的配置向导中,因为这将删除所有更新、删除和插入命令。因此,我仅将 SelectCommand 更改为从向导生成的那个。因此,我保留了我的数据模型的优势,能够对相关表的列进行排序。由于连接,现在查询可能有点慢,但它对我有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-03
    • 2021-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-07
    • 2021-05-21
    相关资源
    最近更新 更多