2010-06-10 52 views
2

我有一个绑定到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:我已经解决了我的排序问题,如下所示。

问候

+1

阅读你的问题,并面临同样的问题。你有没有考虑过使用Linq来获取Objects并将它们用作数据源? 我发现它非常方便选择从多个连接表中获取列的结果。 – PeterFromCologne 2010-06-11 21:19:16

+0

我必须承认linq在我的知识中仍然存在差距。我担心要花费太多时间来改变我的模型以使用linq,当然也要学习基础知识。不过谢谢你的建议,我会考虑一下。 – 2010-06-11 21:44:16

回答

0

UPDATE:我已经解决了我以下列方式排序的问题:我改变了我的数据集模型,并加入了相关表主表(ERP_Charge)。我将列添加到我想要排序的Datatable(f.e。CustomerName)。但是我没有将它保存在DataAdapter的配置向导中,因为这会删除所有的Update-,Delete-和InsertCommands。因此,我只改变了从向导生成的SelectCommand。因此,我保留了我的Datamodel的好处,能够对相关表的列进行排序。也许查询现在有点慢,因为连接,但它适用于我。

相关问题