我有数据条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
我该怎么做?
答案 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)
逐行添加行。