【问题标题】:Not displaying data from a dataset properly in a table, while using a for loop to generate table and cells未在表格中正确显示数据集中的数据,同时使用 for 循环生成表格和单元格
【发布时间】:2014-01-12 02:09:57
【问题描述】:

我有一个数据集,我用它来创建一个带有循环的 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,否则会引发错误)

谁能指出我在循环中哪里出了问题以获得我需要的布局?我猜这是我缺少的一些简单的东西..

谢谢

【问题讨论】:

    标签: c# asp.net for-loop


    【解决方案1】:

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

    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。

    【讨论】:

    • 这行得通,但是当我从 rowCtr 中删除 -1 时,它会抛出一个错误,指出第 7 位没有任何内容,我很清楚这是因为只有 7 条记录,并且只会出现 6 条记录.我不确定这是否算作问题的一部分,但发生这种情况是否有原因?
    • 索引从 0 开始。计数始终为 lastindex + 1。因此,您可以将这个 :int rN = test.dsSubjects.Tables[0].Rows.Count; 更改为这个:int rN = test.dsSubjects.Tables[0].Rows.Count -1; 或照你现在做的那样做。
    • 这很好地提醒了索引和计数之间的区别。我记得数组从 0 开始计数,但不知道 Count lastindex 是 +1,这是为什么呢? Count 设置成这样有什么原因吗?
    • Count 将对集合中的所有项目进行计数。对于 1 项,index = 0,count=1,对于 2 项,最后一项索引是 1,count 是 2。对于 n 项,最后一项索引应该是 n-1(正如我们看到的其他项),count = n .所以,Count = last index + 1。不知道解释是否足够清楚!
    【解决方案2】:

    您的嵌套 for 循环执行了 3 次,但在这里:

    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++;
    
            }
        }
    

    【讨论】:

    • 感谢您编辑您的答案,它的工作方式与其他答案相同。但这会引发与我在对另一个答案的评论中提到的相同的错误。抛出一个错误,说第 7 位没有行,我知道有,你知道为什么吗?
    • 我在嵌套循环中添加了一个 if 语句。再试一次,它会抛出异常,因为数组索引是从零开始的。可能你只有七行,所以最后一行是 row[6]
    • 这与添加的 if 语句抛出相同的错误,然后它抛出所有的计数,我将转到第五条记录,然后从第三条记录重新开始,然后再次抛出关于没有行的错误在位置 7,我什至在 rN 上加了一个 -1,它会抛出错误,rN 是正确的 7 条记录
    猜你喜欢
    • 2023-04-07
    • 1970-01-01
    • 2013-01-26
    • 1970-01-01
    • 1970-01-01
    • 2021-06-26
    • 1970-01-01
    • 1970-01-01
    • 2014-03-26
    相关资源
    最近更新 更多