2011-05-11 40 views
1

我有一個數據表中的數據的列表,我也有一個按鈕,點擊時會顯示已在上週完成的行。修改數據表C#

但是,我不能得到表由於某種原因,修改後更新

我得到7天前的日期,併爲在源數據表中的完成日期比它更大的每一行,我刪除該行。這應該離開我僅在上週完成了行,但由於某種原因,每一行仍然是我的方法完成之後。任何人都可以在這裏發現問題?

在此先感謝您的幫助!

protected void btnShowLastWeek_OnClick(Object sender, EventArgs e) 
    { 
     DateTime current = DateTime.Today; 
     DateTime lastWeek = current.AddDays(-7); 

     DataTable temp = compDV.Table; 

     for(int i = 0; i < temp.Rows.Count; i ++) 
     { 
      DateTime completed = (DateTime)temp.Rows[i]["DateCompleted"]; 

      if (completed.CompareTo(lastWeek.Date) <= 0) 
      { 
       temp.Rows.RemoveAt(i); 
      } 
     } 

     dgCompletedRequests.DataSource = temp; 
     dgCompletedRequests.DataBind(); 
    } 
+1

你需要循環在桌子向後,或你最終會跳過一些指標。如果通過在調試方法步驟 – SLaks 2011-05-11 20:49:15

+1

會發生什麼? – SLaks 2011-05-11 20:50:18

回答

2

我會從註釋遵循SLaks的意見,但是當它發生的時候,我也會考慮撐船,只是重寫代碼來查詢數據表沒有修改原始。

dgCompletedRequests.DataSource = 
     temp.AsEnumerable() 
      .Where(row => row.Field<Datetime>("DateCompleted") >= lastWeek) 
      .AsDataView(); // or .CopyToDataTable(); if you need it 
+0

除此之外不會正確綁定。 http://blog.slaks.net/2011/01/binding-to-lists-of-datarows.html – SLaks 2011-05-11 20:56:34

+0

@SLaks,有趣的,這是有道理的。 – 2011-05-11 20:59:10

+0

'AsDataView()'會更快。 – SLaks 2011-05-11 20:59:31

0

dgCompletedRequests.DataSource在這段代碼執行之前已經設置了嗎?我不確定這是否適用於您,但過去對我而言,您可以嘗試一下。設置你的dgCompletedRequests.DataSource = null;然後將其設置爲溫度。不知何故,我認爲這將「重置」數據綁定。

4

你應該綁定到DataView代替:

dgCompletedRequests.DataSource = 
    new DataView(compDV.Table, "DateCompleted > #" + lastWeek + "#");