我有一個綁定到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