我有一个绑定到DataView的GridView。 DataView表中的某些列是到相关表(f.e。Customer)的外键。我也想为这些列启用排序,但我所能做的只是排序foreignkey(fiCustomer)而不是CustomerName。对与其他表格相关的GridView列排序
我已经试过这没有成功(“找不到列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中的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构建自定义数据表,并将此列绑定到TemplateField。但是,那么我在模型中的巨大数据集就没有意义了。
编辑: 似乎我的问题不清楚或太特殊。或许我可以用一个更一般的术语来解释它。 我有一个数据集模型。我从它绑定一个Datatable(ERP_Charge)到我的GridView(实际上我从该表中取数据视图)。在这个Datatable中是与Dataset中其他Datatables相关的列(关系已定义)。当我想让网格排序在属于ERP_Charge的列上没有问题。但具有外键到其他表的列无法排序,因为Gridview显示f.e.不是CustomerID,而是Customername。我在RowDataBound中获得Customername。 通常我会加入表格并为Customername添加一个Datacolumn。然后我将这个“虚拟”Datatable设置为来自Gridview的数据源,我可以对其进行排序。但我并不想在页面上快速创建数据表(它属于模型)。 我必须在数据集设计器中定义它吗?我认为这将足以定义数据集中的关系。
UPDATE:我已经解决了我的排序问题,如下所示。
问候
阅读你的问题,并面临同样的问题。你有没有考虑过使用Linq来获取Objects并将它们用作数据源? 我发现它非常方便选择从多个连接表中获取列的结果。 – PeterFromCologne 2010-06-11 21:19:16
我必须承认linq在我的知识中仍然存在差距。我担心要花费太多时间来改变我的模型以使用linq,当然也要学习基础知识。不过谢谢你的建议,我会考虑一下。 – 2010-06-11 21:44:16