2012-10-10 4 views
1

몇 가지 열을 반환하는 저장 프로 시저가 있습니다. ProjectID 값이 null 인 gridview를 작성하는 데만 관심이 있습니다. 아래의 코드는 모든 열의 모든 행을 반환합니다. 단지 column = projectID를 반환해야합니다. 누군가 그것을 볼 수 있습니까? 당신이 필요로하는 모든이를처럼 덕분에저장 프로 시저의 특정 열과 행을 정의하는 격자 작성

DataRowCollection rowCollection = spDataTable.Rows; 
DataTable dt = new DataTable(); 

foreach (DataColumn col in spDataTable.Columns) 
{ 
       if (col.ColumnName == "ProjectID") 
       { 
        dt.Columns.Add(col.ColumnName); 
        lb_Test.Items.Add(col.ColumnName); 
         foreach(DataRow ros in col.Table.Rows) 
         { 
          foreach (object oObj in ros.ItemArray) 
          { 
           if (oObj != null) 
           { 
            if (col.ColumnName == "ProjectID") 
            { 
             lb_Test.Items.Add(oObj.ToString()); 
             dt.Rows.Add(oObj); 
            } 
           } 
           else 
           { 
            lb_Test.Items.Add("Null"); 
           } 
          } 
         } 
         grd_test.DataSource = dt; 
         grd_test.DataBind(); 
       } 
       else 
       { 
        lb_Test.Items.Add("Not valid Name"); 
       } 
} 
+1

모든 행에 "ProjectID"라는 열이 포함되어 있습니다. –

+0

@jpavlov null에 대한 행과 null이 아닌 데이터 레이어에서 UI 레이어가 아닌 행을 필터링하십시오. – JonH

답변

1

내가 질문을 이해하고 경우 ProjectID 열의 값이 null입니다

DataRowCollection rowCollection = spDataTable.Rows; 
DataTable dt = new DataTable(); 

foreach(DataRow dr in spDataTable.Rows) 
{ 
     object projectId = dr["ProjectID"]; 
     if (projectId == null) 
     { 
      dt.Rows.Add(dr); 
     } 
    } 

이 모든 행과는 RowCollection을 채울 것입니다 ... 보인다 .

이렇게하면 데 필요한 행만 반환하도록 저장 프로 시저를 변경하는 것이 좋습니다. 이렇게하면 네트워크 트래픽이 절약됩니다.

또한 DataTable에는 필터링 기능이 내장되어 있습니다 ... http://msdn.microsoft.com/en-us/library/zk13kdh0(v=vs.71).aspx. 어쩌면 이것이 더 나은 접근 방법 일 것입니다.

데이터 뷰에는 데이터를 필터링하는 기능도 있습니다. 그런 다음 GridView를 DataView에 바인딩 할 수 있습니다. https://stackoverflow.com/questions/10893860/how-to-filter-gridview-from-textbox

.Net에 내장 된 DataTable을 필터링하는 데는 여러 가지 방법이 있습니다. 자신을 굴릴 필요가 없습니다.

+0

이 – jpavlov

+0

@jpavlov와 rowCollection에 추가 할 수 없습니다 죄송합니다 ... "dt.Rows.Add (dr)"이어야한다고 생각합니다. 그렇게 말하면서, 대안들을 고려해보십시오. 자체 필터링 기능을 사용하는 대신 기본 제공 필터링 기능을 사용하는 것이 좋습니다. 훨씬 더 유연합니다. –