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

时间:2010-06-10 11:02:00

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

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

我试过这个没有成功(“找不到列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的不同表上应用排序,但此表在相关表上会有所不同。 我在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进行排序的推荐方法是什么?我可以使用customername而不是foreignkey构建自定义数据表,并将此列绑定到TemplateField。但是,我在模型中的庞大数据集已经没有任何意义了。

修改 看来我的问题不明确或太特别。 也许我可以用更笼统的术语来改写它。 我有一个带数据集的模型。我将一个Datatable(ERP_Charge)从它绑定到我的GridView(实际上我从该表中获取了一个Dataview)。在此数据表中是与数据集中的其他数据表相关的列(已定义关系)。当我想使网格可排序时,对于属于ERP_Charge的列没有问题。但是具有其他表的外键的列无法排序,因为Gridview显示f.e.不是CustomerID而是Customername。我在RowDataBound中获得了Customername。 通常我会加入表并为客户名添加Datacolumn。然后我从Gridview中将此“虚拟”Datatable设置为Datasource,我可以对其进行排序。但我不想在页面中动态创建数据表(它属于模型)。 我是否必须在数据集-Designer中定义?我认为在数据集中定义关系就足够了。

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

问候

1 个答案:

答案 0 :(得分:0)

更新:我通过以下方式解决了排序问题:我在模型中更改了我的DataSet,并将相关表连接到主表(ERP_Charge)。我将列添加到我要排序的Datatable(f.e.CustomerName)。但是我没有将其保存在DataAdapter的配置向导中,因为这将删除所有Update-,Delete-和InsertCommands。因此,我只更改了SelectCommand和从向导生成的那个。因此,我保持了我的Datamodel的好处,能够对相关表的列进行排序。也许查询现在因为连接而慢一点,但它对我有用。