2013-03-16 70 views
1
var results = from myRow in dsPac.AsEnumerable() 
       where myRow.Field<string>("Package_Name").Equals(lblPackageName.Text) 
       select myRow; 

dsPac包含其中對LINQ與數據表

enter image description here

我想選擇對應於Package1712200466

enter image description here

數據當我綁定到一個GridView我得到的以下錯誤

DataBinding: 'System.Data.DataRow' does not contain a property 
with the name 'Holiday_ID'. 
+0

它會拋出任何異常嗎? – 2013-03-16 15:24:29

+0

是編輯了我的問題 – vini 2013-03-16 15:25:58

+1

有兩列如上圖所示 – vini 2013-03-16 15:30:33

回答

5

在過去,當我有希望綁定到GridView的數據行時,我創建了一個對象來執行此操作。在這種情況下,你可以使用你的Linq查詢來創建一個匿名對象來完成這個任務。

var results = from myRow in dsPac.AsEnumerable() 
       where myRow.Field<string>("Package_Name").Equals(lblPackageName.Text) 
       select new { Holiday_ID = myRow["Holiday_ID"], 
          Holiday_Description = myRow["Holiday_Description"], 
          Holiday_Date = myRow["Holiday_Date"] }; 

我不相信直接排隊會工作 - 請參閱例外文本。行列是通過Item []索引器訪問的,所以您需要編寫一個WPF轉換器來實現相同的效果。總之,因爲Linq查詢會起作用,所以浪費時間。

+0

謝謝........ :) – vini 2013-03-16 15:33:58

3

或者,您可以使用AsDataView()將行集合轉換回GridView能夠綁定到的DataView。

var results = (from myRow in dsPac.AsEnumerable() 
       where myRow.Field<string>("Package_Name").Equals(lblPackageName.Text) 
       select myRow).AsDataView(); 
+0

在這裏學到了新東西,謝謝。 – theMayer 2013-03-16 15:50:21

+1

@mayer:你也可以使用'CopyToDataTable'。 – 2013-03-16 16:26:22

+0

謝謝蒂姆,爲你的答案。其實我也犯了一些錯誤.CopyToDataTable幫助我。它解決了我的問題。 – 2016-03-07 06:16:39