2013-07-04 127 views
2

我試過了下面的代碼,但datagridview中沒有顯示任何內容。將一組數據行綁定到datagridview

有什麼建議嗎?

string strFilterOption = "dtcolnPurchaseProductExpProductNo=270"; 
dgvProductExp.DataSource = dtPurchaseProductExp.Select(strFilterOption); 
+0

不是一個非常完整的描述。但你有沒有試過'dgvProductExp.Databind()'?如果是這樣,請發佈代碼和問題的完整說明。 – saamorim

回答

2

MSDN

DataGridView的類支持標準的Windows窗體 數據綁定模型。這意味着數據源可以是 實現以下接口之一的任何類型:

IList接口,包括一維數組。

IListSource接口,如 的DataTable和DataSet類。

IBindingList接口,如 的BindingList類。

IBindingListView接口,如 BindingSource類。

由於數組綁定的默認行爲,因此無法爲DataSource屬性設置Datatable.Select方法將返回的Datarows數組。從this post

主要之一是,該對象實現IList或者是 1維數組。事情是,數組綁定的默認行爲爲 - Reflection。數組中的對象類型是 ,反映它可以發現其未編入索引的公共屬性,而 具有可以在網格中表示的值類型。這些 屬性然後在數據綁定發生時用作字段。 由於數組中的數據類型是DataRow,因此有六個公共的 屬性:HasErrors,Item,ItemArray,RowError,RowState和 表。但Item是一個索引屬性,ItemArray的類型爲 Object(),它不能在gridview中顯示,因此這兩個 屬性將被忽略,其他四個將顯示在網格中。

因此,另一種方法將創建一個新的DataTable,使用Clone方法從DataTable源獲取模式,並使用DataRow數組填充新的DataTable。

string strFilterOption = "dtcolnPurchaseProductExpProductNo=270"; 
DataTable cloneTable; 
cloneTable = dtPurchaseProductExp.Clone(); 
foreach (DataRow row in dtPurchaseProductExp.Select(strFilterOption)) 
{ 
    cloneTable.ImportRow(row); 
} 
dgvProductExp.DataSource = cloneTable; 

或者,您還可以通過BindingSource對象執行綁定並使用其Filter屬性。

0

您是否測試過dgvProductExp.DataSource.Tables(0).Rows.Count? ..如果它表明0這就是爲什麼..

或者你確定這不是

string strFilterOption = "dtcolnPurchaseProductExpProductNo='270'";