2013-06-26 29 views
-1

我有一個表,看起來像這樣:在數據表中的某些點插入一行?

Name Hours 
Mark 10 
Mark 15 
Mark 10 
Mark 13 
Albert 11 
Albert 12 
Max 10 
Max 13 

該數據駐留在數據表,這是我的gridview的數據源。如果可能,我希望在Name字段更改時迭代數據表並插入一行。就像這樣:

Name Hours 
Mark 10 
Mark 15 
Mark 10 
Mark 13 

Albert 11 
Albert 12 

Max 10 
Max 13 

是否可以使用foreach循環通過這個DataTable,並在名稱發生變化,在這一點上插入一行來遍歷?或者,是否有另一種方法來獲得所需的結果?

感謝您的指點!

編輯:我的代碼,到目前爲止:

 var counter = 0; 
     var holdName = ""; 
     // looping through datatable dt. 
     foreach (DataRow row in dt.Rows) 
     { 
      //compare name from dt to hold name 
      //if different 
      // insert blank row 
      // change hold name to new name 
      //continue looping 
     } 
     gridview1.Datasource = dt; 
     gridview1.DataBind(); 

,但問題是,設置在循環中保持名稱被證明是非常棘手。這就像它需要首先在循環中設置'ouside',然後在循環中進行檢查。問題是,我怎麼知道名稱是什麼,而沒有獲得數據表中的第一條記錄?也許,那是我的答案?獲取第一條記錄,將名稱放入保存名稱變量中,然後啓動foreach循環?

+0

是的,'foreach'循環肯定會提供一個可行的解決方案。 –

+2

插入順序應該永不重要,請改爲使用order by子句。編輯 - 等待你談論某種UI元素或數據庫表?你的意思很不清楚。 – asawyer

+0

我同意asawyer,你不需要遍歷數據庫並插入一個特定的點。在數據庫表中插入新行,然後使用SQL以特定順序(ORDER BY子句)或過濾數據列表(WHERE子句)正確檢索數據。不要試圖讓你的UI成爲SQL Server Management Studio。 –

回答

2

我認爲,如果你使用ASP.NET ListView控件和使用數據分組,這樣你會得到更好的效果:

Using ASP.NET 3.5's ListView and DataPager Controls: Grouping By a Data Field

這是一個有點過時的文章,但我認爲它會得到你到你想去的地方。

+0

謝謝,卡爾!我會很快檢查這個鏈接。我很感激! – Kevin

+0

該ListView看起來像它可能是我正在尋找的票。憑藉分組的內在能力,它看起來正是我正在尋找的東西!謝謝,卡爾! – Kevin

1

正如Brad M已經指出的那樣,foreach循環將起作用。您只需要將名稱存儲在變量中,並檢查當前行的名稱是否與最後一行中的名稱相同(或者您可以檢查當前行中的名稱是否與下一行中的名稱相同行,但這可能會導致OutOfBoundsException)。

+0

這就是我現在要做的。我的foreach循環使用一個變量來保存名稱,當它獲得下一個記錄時,如果名稱與我的「保留」名稱不同,我想插入一個空行,並使'hold'名稱成爲新名稱。 – Kevin

+0

@JavaRox:你可以嘗試'Rows.InsertAt(DataRow,index)',看看它是否適合你。 – waka

+0

謝謝!我現在就試試看。 – Kevin

相關問題