2011-04-22 31 views
2

我知道有RowFilter選項根據列值進行過濾。還有方法可以選擇前N行。但是,如何過濾並獲得行(我更願意將它與相同的DataView dv相比),比如位置10到位置23?如何從第i行過濾數據視圖到第j行? (C#)

這是我的要求。我有一個DataView DV有100行。我有一個包含10個項目的列表框。當我在列表框中選擇第一個項目時,我想要加載前10行的數據視圖(加載部分在我的程序中,請留給我),如果我選擇列表框中的第二項,然後我想row11到row20加載等等。我可以做列表框部分,但如何選擇基於行號的數據視圖值?

這是我的代碼的外觀:

  DataSet ds = new DataSet(); 
      DataTable dt = ds.Tables["words"]; 
      DataView dv = new DataView(dt); 

現在如何根據行位置有從DV數據視圖?

謝謝。

+0

一個簡單的方法是添加將舉行的值作爲rowIndex的列,然後你可以使用相同的** **的RowFilter @ – V4Vendetta 2011-04-22 04:19:49

+0

V4Vendetta,可能無法正常工作,或變得同樣複雜(然後,我必須爲前10行分配列名,然後爲後10行分配另一個名稱,基本上是一個更大的麻煩),考慮到數據庫的所有行都是在程序中動態創建的,並且不需要在下一個時刻出現。 – nawfal 2011-04-22 04:23:56

回答

3

您可以利用Linq中提供的擴展方法按位置獲取行。例如:

// just setting up a table for the sample 
DataTable table = new DataTable(); 
table.Columns.Add("ID", typeof(int)); 

for (int i = 1; i <= 100; i++) 
{ 
    table.Rows.Add(i); 
} 

// grabbing rows 11 through 20 using Linq 
DataTable filtered = table.AsEnumerable().Skip(10).Take(10).CopyToDataTable(); 

上述工作與.NET 3.5 +,C#3.0 +。對於在舊版本的C#和.NET中可用的東西,您可以在更多的代碼中手動完成。

// starting by cloning 'table' (see code above) 
DataTable filtered = table.Clone(); 

int skipRows = 10; 
int selectRows = 10; 

for (int index = skipRows; 
    index < skipRows + selectRows && index < table.Rows.Count; 
    index++) 
{ 
    filtered.Rows.Add(table.Rows[index].ItemArray); 
} 
+0

@安東尼,謝謝你。這個Linq方法會在C#2.0(Visual Studio 2005)中工作嗎? – nawfal 2011-04-22 04:11:52

+1

@nawful,不,它不會。我可以更新以向你展示2.0兼容的代碼,給我一點時間。這基本上是手動工作。 – 2011-04-22 04:13:31

+0

@安東尼,好的,謝謝。等待.. – nawfal 2011-04-22 04:15:59

相關問題