2011-05-11 39 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 + "#");