c# - 只有最后一个单元格被添加到行

标签 c# asp.net

我正在尝试手动将三个标题添加到表格中。该表使用来自 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/

相关文章:

c# - Gridview 中使用索引进行编辑

asp.net - 将 MVVM 应用于 ASP.NET

c# - asp.net 下拉数据源

c# - 异步加载 Orchard 自定义小部件

c# - Entity Framework 将嵌套实体映射到 View 模型

c# - 将 Big ZipArchive-MemoryStream 上传到 Azure

c# - 我怎样才能得到一个数据库表的总和到一个变量?

asp.net - 使用 AJAX 进行 WCF 调用

c# - 组合框的值应显示在文本框中

c# - 创建一种从另一个线程安全访问控件的方法