在使用for循环生成表和单元格时,不会在表中正确显示数据集中的数据

时间:2014-01-12 02:09:57

标签: c# asp.net for-loop

我有一个数据集,我用它来创建一个带循环的html表。我可以使用数据集中的主题填充单元格,但不能正确布局。 当我运行它时,表格将主题显示为

Subject1 Subject1 Subject1
Subject2 Subject2 Subject2
Subject3, Subject3, Subject3

我试图让它看起来像,

Subject1 Subject2 Subject3
Subject4 Subject5 Subject6
Subject7 Subject8 Subject9

我的代码是..

// Current row count.
        int rowCtr;
        // Total number of cells per row (columns).
        int cellCtr;
        // Current cell counter.
        int cellCnt;

        //count number of rows in dataset
        int rN = test.dsSubjects.Tables[0].Rows.Count;

        cellCnt = 3;

        for (rowCtr = 1; rowCtr <= rN; rowCtr++)
        {
            // Create a new row and add it to the table.
            TableRow tRow = new TableRow();
            Table1.Rows.Add(tRow);

            for (cellCtr = 1; cellCtr <= cellCnt; cellCtr++)
            {
                // Create a new cell and add it to the row.
                TableCell tCell = new TableCell();
                tRow.Cells.Add(tCell);

                // Add a literal text as control.
                string myStr = test.dsSubjects.Tables[0].Rows[rowCtr -1]["SubjectName"].ToString();

                tCell.Controls.Add(new LiteralControl(myStr));

            }
        }

我知道这是基本的,但我之前没有用for循环来做这件事。

(只是旁注,我在通过数据集时得到的rowCtr为-1,因为如果没有,则会抛出错误)

任何人都可以指出我在循环中出错的地方以获得我需要的布局吗?我猜这很简单我错过了..

由于

2 个答案:

答案 0 :(得分:0)

你的嵌套for循环执行了三次但是在这里:

test.dsSubjects.Tables[0].Rows[rowCtr -1]["SubjectName"].ToString();

你总是得到相同的价值。所以你的价值重复三次。检查你的价值并再试一次。

试试这个:

for (rowCtr = 0; rowCtr < rN; rowCtr+=3)
    {
        // Create a new row and add it to the table.
        TableRow tRow = new TableRow();
        Table1.Rows.Add(tRow);
        int temp = rowCtr;
        for (int i = 0; i<3; i++)
        {
            if(temp >=rN) break;
            // Create a new cell and add it to the row.
            TableCell tCell = new TableCell();
            tRow.Cells.Add(tCell);

            // Add a literal text as control.
            string myStr = test.dsSubjects.Tables[0].Rows[temp]["SubjectName"].ToString();

            tCell.Controls.Add(new LiteralControl(myStr));
            temp++;

        }
    }

答案 1 :(得分:0)

如上所述,您重复三次相同的数据。读一行后增加行计数器,如下所示:

string myStr = test.dsSubjects.Tables[0].Rows[rowCtr -1]["SubjectName"].ToString();
rowCtr++;

编辑:关于评论中的第二个问题,Index为0,Count始终为LastIndex + 1

当你这样做时:

int rN = test.dsSubjects.Tables[0].Rows.Count;

然后您可以访问的最后一行是rN - 1,实际上您在此处执行此操作:test.dsSubjects.Tables[0].Rows[rowCtr -1]["SubjectName"].ToString();

上面的代码应该可以正常工作,您可以测试将rowCtr替换为1到7。