【发布时间】: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