C# 只有最后一个单元格被添加到行中
我试图手动将三个标题添加到一个表中。该表使用SqlDataReader中的数据填充得很好,但是我在保持第一行时遇到了问题C# 只有最后一个单元格被添加到行中,c#,asp.net,C#,Asp.net,我试图手动将三个标题添加到一个表中。该表使用SqlDataReader中的数据填充得很好,但是我在保持第一行时遇到了问题 TableRow iRow = new TableRow(); TableCell iCell = new TableCell(); iCell.Text = "SUBMITTED BY"; iRow.Cells.Add(iCell); iCell.Text = "ON"; iRo
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);
导致表上仅显示最后一个条目(在本例中为“问题说明”)。我在这方面找到了一个解决办法
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
谢谢 每次都需要重新创建
iCell
,否则您会反复添加同一个实例,而只是更改其文本。由于它们都是同一个实例,.Add(..)
操作会识别出这一点,并且不会再次添加,因此实际上代码末尾的行中只有一个单元格-iCell
的单个实例
下面是一个应该正确工作的示例:
TableRow iRow = new TableRow();
TableCell iCell = new TableCell();
iCell.Text = "SUBMITTED BY";
iRow.Cells.Add(iCell);
iCell = new TableCell(); // create new cell
iCell.Text = "ON";
iRow.Cells.Add(iCell);
iCell = new TableCell(); // create new cell
iCell.Text = "ISSUE DESCRIPTION";
iRow.Cells.Add(iCell);
table.Rows.Add(iRow);
如果要使代码更简洁,可以创建一个helper方法,该方法返回一个新的单元格实例,并为文本指定一个参数:
public TableCell CreateCell(string text) {
TableCell iCell = new TableCell();
iCell.Text = text;
return iCell;
}
然后,您的代码可以简化为以下内容:
TableRow iRow = new TableRow();
iRow.Cells.Add(CreateCell("SUBMITTED BY"));
iRow.Cells.Add(CreateCell("ON"));
iRow.Cells.Add(CreateCell("ISSUE DESCRIPTION"));
table.Rows.Add(iRow);
C中有我遗漏的东西吗#
听起来不错
这:
创建一个TableCell
对象,并将其引用分配给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" },
}
};
TableRow row = new TableRow {
Cells = {
new TableCell { Text = "SUBMITTED BY" },
new TableCell { Text = "ON" },
new TableCell { Text = "ISSUE DESCRIPTION" },
}
};