2010-04-29 38 views
2

我的DataTable tableDataTable,並DataGridView的

id name address phoneno 
1 abc kfjskl 798798 
2 bcd kjdsfl 808909 
3    899009 
    fjsh kjllkjl 
5 jfkd 

而且我通過代碼在DataGridView顯示此值

dataGridView1.ColumnCount = Table.Columns.Count; 
dataGridView1.RowCount = Table.Rows.Count; 
for (int i = 0; i < dataGridView1.RowCount; i++) 
{ 
    for (int j = 0; j < dataGridView1.ColumnCount; j++) 
    { 
     dataGridView1[j, i].Value = Table.Rows[i][j].ToString(); 
    } 
} 

現在我不希望顯示有一定的缺失值的行像如果我會這樣做然後datagridview看起來像

1 abc kfjskl 798798 
2 bcd kjdsfl 808909 

我該怎麼辦那?

回答

1

這將你需要的東西(我認爲):

dataGridView1.ColumnCount = Table.Columns.Count; 
for (int i = 0; i < Table.Rows.Count; i++) 
{ 
    bool valueMissing = false; 
    DataGridViewRow row = new DataGridViewRow(); 
    for (int j = 0; j < dataGridView1.ColumnCount; j++) 
    { 
     if (Table.Rows[i][j].ToString() == "") 
     { 
      valueMissing = true; 
      break; 
     } 
     else 
     { 
      row.Cells[j].Value = Table.Rows[i][j]; 
     } 
    } 
    if (!valueMissing) 
    { 
     dataGridView1.Rows.Add(row); 
    } 
} 

這可能需要修改Table.Rows[i][i]檢查空值(除了剛檢查空字符串值)。

0

我不確定我是否理解,但您可以使用DataTable.Select過濾掉任何缺少值的行,然後將它們插入到數據網格中。

或者,除了對行使用for循環外,只需在表中的行上使用foreach循環,然後逐行添加行dataGridView.Rows.Add(newRow)

+0

@ ho,如何過濾不丟失值的行? – Harikrishna 2010-04-29 12:57:38

+0

@ ho,在這裏使用foreach循環有什麼好處? – Harikrishna 2010-04-29 13:00:32

+0

如果您對錶中的行使用foreach(或者對於我認爲foreach是整潔的),而不是DataGRidView中的行,則不必事先將行添加到網格,因此可以過濾掉你不想要的行。 – 2010-04-29 13:52:18

1

我認爲你最好的選擇是在DataGridView和DataTable之間使用DataView。 DataView允許您使用和表達式篩選值,而不影響原始DataTable。要過濾所有空列,你可以創建一個視圖與這個表達式:

DataView view = new DataView(table); 

view.RowFilter = "ISNULL(id, '') <> '' AND ISNULL(name, '') <> '' AND ISNULL(address, '') <> '' AND ISNULL(phoneno, '') <> ''"; 

的ISNULL函數替換列值白衣指定的字符串,如果列值爲空。因此,過濾器將用空字符串替換每個NULL值,因此排除NULL或空列。

然後你可以使用此視圖assing值到電網,而不是使用數據表:另外

dataGridView1.ColumnCount = view.Columns.Count; 
dataGridView1.RowCount = view.Rows.Count; 
for (int i = 0; i < dataGridView1.RowCount; i++) 
{ 
    for (int j = 0; j < dataGridView1.ColumnCount; j++) 
    { 
    dataGridView1[j, i].Value = view.Rows[i][j].ToString(); 
    } 
} 

,而不是使用循環提供值到電網,你可以簡單地使用數據綁定。它更簡單:

dataGridView1.DataSource = view; 

希望它有幫助!

+0

您可以在此處看到有效的表達式文檔:http://msdn.microsoft.com/es-es/library/system.data.datacolumn.expression(v=VS.80).aspx – 2010-04-29 13:12:07

+0

但每次字段名稱都不相同。 – Harikrishna 2010-04-29 13:24:29

+0

使用DataView和Databinding的+1。 – Ken 2010-04-29 14:15:17

相關問題