2009-10-19 3 views
1

저는 C#과 .NET 3.5를 사용하고 있으며 코드 숨김 페이지에서 프로그래밍 방식으로 dataSource를 설정하려고하는 GridView를 사용하고 있습니다. DataTable에 데이터가 있고 각 행의 열 값 (isValid 부울)에 따라 DataView에 DataRowView.AddNew() 메서드를 사용하여 DataViews - dvValid 또는 dvInvalid 중 하나에 새 행을 만듭니다. DataView 테이블에 추가 할 새 DataTable.NewRow를 만들지 않습니다. 그런 다음 GridView를 적절한 dataView에 바인딩합니다.DataView.Count different DataView.Table.Rows.Count

GridView를 정렬 할 때 문제가 있습니다. 1 행이 올바르게 정렬되지 않는 문제가 있습니다. 다른 모든 행은 올바르게 정렬됩니다. 내 코드를 디버깅 한 DataView.Table.AcceptChanges() 메서드를 호출하는 경우에도 DataView.Count 1 DataView.Table.Rows.Count 것보다 더 발견했습니다. dataTable에 모든 커밋 된 행이 있어야하므로 개수가 동일해야하므로 이상합니다.

왜 2 카운트가 다른가요? DataView는 DataTable의 하위 집합이므로 DataTable과 같거나 적은 행을 가져야합니다. DataView를 채울 때 DataView를 직접 만들지 말고 먼저 만들어야합니까? 지금 당장은 dDataTableRow없이 DataRowView를 직접 작성하고 있습니다. 올바른 방법입니까?

도움 주셔서 감사합니다.

코드 : C#

...

//get the data as DataTable 
members = GetMemberDataTable(); 

//create views from a new DataTable with no rows 
dvValidMembers = new DataView (CreateMembersDT("ValidMembers")); 
dvInValidMembers = new DataView (CreateMembersDT("InvalidMembers")); 

//iterate thru each row and put into appropriate DataView 
foreach (DataRow memberRow in members.Rows) 
      { 
       if ((bool)memberRow["isValid"]) 
        //Add to valid members Dview 
        member = dvValidMembers.AddNew(); 
       else 
        //add to InValid members Dview 
        member = dvInvalidMembers.AddNew(); 

       member["memberID"] = memberRow["memID"]; 

      } //foreach 

    dvInvalidMembers.Table.AcceptChanges(); 
    dvValidMembers.Table.AcceptChanges(); 

} 

private System.Data.DataTable CreateMembersDT (string tableName) 
    { 
     System.Data.DataTable dtMembers = new System.Data.DataTable(tableName); 

     dtMembers.Columns.Add(new DataColumn("memID", typeof(int))); 

     return dtMembers; 
    } 
+0

답은 DataRowView.EndEdit() 메서드를 호출하여 DataView.DataTable.Rows 컬렉션에 추가하고 두 Row 수 모두 일치하도록하는 것입니다. 또한 GridView.Sort() 메서드는 행을 정렬 할 때 DataView.DataTable.Rows 컬렉션을 찾습니다. 그러나 GridView를 표시 할 때 DataView.DataViewRows 컬렉션을 사용하여 행을 표시한다고 추측합니다. 그 이유는 정렬 할 때 모든 행에서 마지막 행을 뺀 것이고, 표시 할 때 모든 행을 표시하는 이유입니다. – Pritika

+0

예, 아마도. 보기를 통해 정렬 및 필터를 수행 할 수 있습니다. –

답변

0

잘 정렬되지 않은 1 행, 즉 마지막 행이 될 수 있다고?

나는 당신이 DataView.EndEdit()을 누락 생각 :

foreach (DataRow memberRow in members.Rows) 
{ 
    DataView dv; 
    if (...) 
     //Add to valid members Dview 
     dv = dvValidMembers; 
    else 
     dv = dvInvalidMembers; 

    member = dv.Addnew(); 
    member["memberID"] = memberRow["memID"]; 
    dv.EndEdit(); 
} 

그러나 나는 또한 당신은 아마 isValid에 필터와 2 개보기를 사용할 수 있습니다 싶습니다 다음은 지적해야 원래 멤버 테이블에 추가합니다.

+0

감사합니다 헨크, 그것은 마지막 행입니다. 다른 제안도 시도해 보도록하겠습니다. – Pritika

관련 문제