2017-04-20 7 views
-1

엑셀 파일의 데이터 테이블에 데이터를 업로드했습니다. 무엇 datatable에서 빈 행을 확인하는 가장 좋은 방법. 주의 : Visual Studio 2005에 대한 솔루션이 필요합니다. 윤년 사용 linq. Visual Studio 2005에서 LINQ가없는 데이터 테이블의 빈 행을 확인하십시오.

foreach (DataRow row in result.Rows) 
{ 
//check if row is empty 
//if not continue processing data 
//else remove the row from datatable 
} 

현재 내 마음의 솔루션은 foreach 루프 내부에 다른 foreach 루프를 넣어 각 열을 확인합니다. 모든 열이 널 (NULL)이면, 데이터 테이블에서 행을 제거하십시오.

다른 유용한 방법이 있습니까? 위의 메서드는 각 루프마다 다른 메서드가 있으므로 실행하는 데 더 많은 시간이 필요합니다. 데이터 테이블에는 많은 행이 있습니다.

편집 :이 괜찮

private bool checkIfRowEmpty(DataRow row) 
    { 
     var r = (DataRow)row; 
     int emptyCount = 0; 
     int itemArrayCount = r.ItemArray.Length; 
     foreach (var i in r.ItemArray) if (string.IsNullOrWhiteSpace(i.ToString())) emptyCount++; 
     if (emptyCount == itemArrayCount) return false; 
     else return true; 
    } 

:

나는 하나 개의 코드있어? 아니면 아래의 솔루션을 사용해야합니까? 어느 것이 좋은가요? 내가 생각할 수있는

+0

나는 두 개의 중첩 루프가 간단하고 성능도 충분히 좋은 생각합니다. –

+0

@Jnavero 그는 각 행을 개별적으로 확인하려고합니다. –

+0

linq을 사용하고 싶지 않은 이유는 무엇입니까? –

답변

0

가장 좋은 방법은 다음과 같은 하나입니다

public bool IsRowEmpty(DataRow row) 
{ 
    if (row == null) 
     return true;  

    foreach(var value in row.ItemArray) 
    { 
     if (value != null) 
      return false; 
    } 
    return true; 
} 
메인 코드에서 다음

: 여기

foreach (DataRow row in result.Rows) 
{ 
    if(!IsRowEmpty(row)) 
    { 
     // Row is not empty. 
    } 
} 
+0

이것은 내가 생각한 것입니다. 내가 생각하는 한 가지 변화가 있어야한다. 임의의 열이 null의 경우는 false를 돌려줍니다. 행의 모든 ​​열이 null 인 경우에만 false를 반환하고 싶습니다. 위 코드에서 빈 행과 rows.count의 총 수를 확인했습니다. – Ashin

+0

@kingfisher 실제로 적어도 하나의 열이 null이 아닌 경우 false를 반환하므로 코드가 올바르게 작동합니다. 그러나 메서드의 이름을 변경하여 해당 용도를 더 쉽게 이해할 수 있도록했습니다. –

0

하나의 방법입니다 - 모든 행을 반복하고 모든 열

DataTable table = new DataTable(); 
List<int> rowsToRemove = new List<int>(); 
for (int i = 0; i < table.Rows.Count; i++) 
{ 
    DataRow row = table.Rows[i]; 
    foreach (DataColumn col in row.Table.Columns) 
    { 
     bool skip = false; 
     if (row[col] != null) 
     { 
      //this column is not null, so mark skip flag as true 
      skip = true; 

     } 
     if (skip) 
      //this row should be skipped because it has at least one column that isn't null 
      break; 
     else 
      rowsToRemove.Add(i); 
      //mark this row's index for deletion 
    } 
} 

//loop through list in reverse order and remove rows by their index 
for (int i = rowsToRemove.Count; i > 0; i--) 
    table.Rows.RemoveAt(i); 
0

안녕하세요,

당신은 단순히이 사용하는 DataView를을 achive 수 있습니다 같이 -

DataView dv = yourTable.DefaultView; 
dv.Sort = "column_1,column_2"; 
DataTable dtNew = dv.ToTable(true, "column_1", "column_2",...,"column_n"); // please mention all columns here 
dtNew.Rows.RemoveAt(0); 
관련 문제