I'm trying to manually add three headers to a table. The table fills out fine with data from the SqlDataReader, but I'm having trouble getting the first row to stick.
        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);
causes only the last entry, in this case, ISSUE DESCRIPTION, to show up on the table. I've found a workaround in
        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);
but it's bothering me how much messier that is. Is something wrong with my logic, or is there something I'm missing in C#? I've got a pretty good handle on C, but just started C# a couple weeks ago.
Thanks!
is there something I'm missing in C#
Sounds like it, yes.
This:
TableCell iCell = new TableCell();
creates a TableCell object, and assigns a reference to it to the iCell variable. The value of iCell is just a reference to the object. It's not the object itself. This:
iRow.Cells.Add(iCell);
passes that reference to the Add method. It doesn't pass an object to Add - you can never do that in C#. So your row ends up with lots of references to the same cell, and all the changes you've made in lines like this:
iCell.Text = "ON";
just overwrite each other, as they're making changes to the same object.
You may find these articles useful:
Personally I would change your code to use collection initializers and object initializers:
TableRow row = new TableRow {
    Cells = {
        new TableCell { Text = "SUBMITTED BY" },
        new TableCell { Text = "ON" },
        new TableCell { Text = "ISSUE DESCRIPTION" },
    }
};
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With