c# – 只有最后一个Cell被添加到Row中

我正在尝试手动将三个标题添加到表中.该表用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对象,并将其引用分配给iCell变量. iCell的值只是对象的引用.这不是对象本身.这个:

iRow.Cells.Add(iCell);

传递对Add方法的引用.它不会将对象传递给Add – 您永远不能在C#中执行此操作.因此,您的行最终会有大量对同一单元格的引用,以及您在这些行中所做的所有更改,如下所示:

iCell.Text = "ON";

只是相互覆盖,因为他们正在对同一个对象进行更改.

您可能会发现这些文章很有用:

> References and values
> Parameter passing in C#

我个人会更改您的代码以使用集合初始化器和对象初始化器:

TableRow row = new TableRow {
    Cells = {
        new TableCell { Text = "SUBMITTED BY" },
        new TableCell { Text = "ON" },
        new TableCell { Text = "ISSUE DESCRIPTION" },
    }
};

转载注明原文:c# – 只有最后一个Cell被添加到Row中 - 代码日志