【发布时间】:2012-08-17 01:16:45
【问题描述】:
我试图了解使用以下方法创建的行之间的区别:
newTable.Rows.Add(array);
newTable.ImportRow(row);
我有一个 WinForms 应用程序,它使用这两种方法向 DataTable 添加行。 现在,当我将该 DataTable 用作 DataGridView 的数据源时,我可以看到使用这两种方法创建的“所有”行。 但是,当我使用类型的循环时
foreach (DataRow row in newTable.Rows)
{
//...do work
}
循环仅“看到”使用 ImportRow 方法创建的行。好像使用 Rows.Add(array) 创建的行不存在,但显然它们确实存在,因为当我使用 DataTable 作为其 DataSource 时,我可以在 DataGridView 中看到它们。
编辑(随后由 Rahil Jan Muhammad 发表评论)
是的 - 在玩了很多之后,我认为行添加方法与它无关。问题出在以下代码中:
foreach (DataGridViewColumn col in dataAllocations.Columns)
{
if (col.Name == "Allocation")
{
col.ReadOnly = false;
}
else
{
col.ReadOnly = true;
}
}
foreach (DataGridViewRow row in dataAllocations.Rows)
{
MessageBox.Show("DataGrid, " + row.Cells["AllocID"].Value.ToString() +
", " + row.Cells["Active"].Value.ToString());
if (row.Cells["Active"].Value == null || (bool)row.Cells["Active"].Value == false)
{
row.ReadOnly = true;
}
else
{
row.ReadOnly = false;
}
}
第一个循环使除“分配”列之外的所有列都是只读的。如果“活动”列中的值为假,则第二个循环旨在使“分配”列甚至为只读。然而,正在发生的事情恰恰相反。 Active 为 true 的那些行是只读的,反之亦然。所以是的,我的“if”语句有问题。但是什么?
【问题讨论】:
-
请参考下面的链接了解差异:stackoverflow.com/questions/5140158/… 就您的问题而言,您无法访问使用 newTable.Rows.Add(array) 添加的行。请提供您的代码,以便我们查看。
-
我现在添加了更多代码 - 谢谢。
-
在你的消息框中尝试添加 Cells["Active"] 的值。我猜这个 IF 条件有问题