我正在尝试手动将三个标题添加到表格中。该表使用来自 SqlDataReader 的数据填写得很好,但我无法保留第一行。
TableRow iRow = new TableRow();
TableCell iCell = new TableCell();
iCell.Text = "SUBMITTED BY";
iRow.Cells.Add(iCell);
iCell.Text = "ON";
iRow.Cells.Add(iCell);
iCell.Text = "ISSUE DESCRIPTION";
iRow.Cells.Add(iCell);
table.Rows.Add(iRow);
仅导致最后一个条目(在本例中为 ISSUE DESCRIPTION)显示在表中。我在
中找到了解决方法 TableRow iRow = new TableRow();
TableCell iCell = new TableCell();
TableCell iCell2 = new TableCell();
TableCell iCell3 = new TableCell();
iCell.Text = "SUBMITTED BY";
iRow.Cells.Add(iCell);
iCell2.Text = "ON";
iRow.Cells.Add(iCell2);
iCell3.Text = "ISSUE DESCRIPTION";
iRow.Cells.Add(iCell3);
table.Rows.Add(iRow);
但让我感到困扰的是它有多困惑。我的逻辑有问题,还是我在 C# 中遗漏了什么?我对 C 有很好的掌握,但几周前才开始使用 C#。
谢谢!
最佳答案
is there something I'm missing in C#
听起来像,是的。
这个:
TableCell iCell = new TableCell();
创建一个 TableCell
对象,并将它的 reference 分配给 iCell
变量。 iCell
的值只是对该对象的引用。它不是对象本身。这:
iRow.Cells.Add(iCell);
将该引用 传递给Add
方法。它不会将对象传递给 Add
- 在 C# 中永远不能这样做。所以你的行最终有很多对同一个单元格的引用,你在这样的行中所做的所有更改:
iCell.Text = "ON";
只是互相覆盖,因为他们正在对同一个对象进行更改。
您可能会发现这些文章很有用:
我个人会更改您的代码以使用集合初始化器和对象初始化器:
TableRow row = new TableRow {
Cells = {
new TableCell { Text = "SUBMITTED BY" },
new TableCell { Text = "ON" },
new TableCell { Text = "ISSUE DESCRIPTION" },
}
};
关于c# - 只有最后一个单元格被添加到行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10211368/