2011-05-11 6 views
1

데이터 테이블에 데이터 목록이 있습니다.이 버튼을 클릭하면 마지막 주에 완료된 행이 표시됩니다.DataTables 수정 C#

그러나, 나는 어떤 이유로 수정 후 업데이트 할 수있는 테이블을 얻을 어차피

나는 7 일 전 날짜를 얻고, 소스의 DataTable에보다 큰 완료 날짜가 모든 행에 대해, I 해당 행을 삭제하십시오. 지난주에 완료된 행만 남겨 두어야하지만, 어떤 이유로 모든 행이 내 메서드가 완료된 후에도 남아 있습니다. 아무도 문제를 여기에서 발견 할 수 있습니까?

미리 도움을 청하십시오!

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

+1

디버거에서 메서드를 단계별로 실행하면 어떻게됩니까? – SLaks

답변

2

나는 코멘트에서 SLaks의 조언을 따를 것이지만, 그것에 관해서는, 나는 또한 punting을 고려해보고 원본을 수정하지 않고 datatable을 쿼리하는 코드를 다시 작성한다.

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

+0

@SLaks, 흥미 롭다. –

+0

'AsDataView()'가 더 빨라졌습니다. – SLaks

0

이 코드가 실행되기 전에 dgCompletedRequests.DataSource가 이미 설정 되었습니까? 나는 이것이 당신을 위해 일할 지 모르지만 그것은 과거에 나에게 해왔다. 당신은 이것을 시도해 볼 수있다. dgCompletedRequests.DataSource = null을 설정하십시오. 그런 다음 임시로 설정하십시오. 어쨌든 이것이 데이터 바인딩을 "재설정"할 것이라고 생각합니다.

4

당신은 대신 DataView에 결합해야합니다

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