数据表和Datagridview

时间:2010-04-29 12:51:11

标签: c# winforms datagridview datatable

我有数据条table喜欢

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

我该怎么做?

3 个答案:

答案 0 :(得分:1)

我认为您最好的选择是在DataGridView和DataTable之间使用DataView。 DataView允许您使用和表达式过滤值,而不会影响原始DataTable。要过滤所有空列,您可以使用以下表达式创建视图:

DataView view = new DataView(table);

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

如果列值为null,则ISNULL函数将替换指定字符串的列值。所以过滤器用空字符串替换每个NULL值,因此不包括NULL或空列。

然后,您可以使用此视图将值分配给网格,而不是使用数据表:

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;

希望它有所帮助!

答案 1 :(得分: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]中的空值(除了检查空字符串值之外)。

答案 2 :(得分:0)

我不确定我是否理解,但您可以使用DataTable.Select过滤掉任何缺少值的行,然后再将它们插入数据网格中。

否则,不要对行使用for循环,只需在表中的行上使用foreach循环,然后使用dataGridView.Rows.Add(newRow)逐行添加行。