0

我在客户端动态创建一个表并用人名列表填充它。

sbData.Append("<table>");
    int iColumnCounter = 1;
    sbData.Append("<tr>");

    foreach (int _iPerId in lsiPeople)
    {
        if (iColumnCounter == 5)
        {
            iColumnCounter = 1;
            sbData.Append("</tr><tr>");
        }

        string sName = GetPersonName(_iPerId);
        DropDownList_Student.Items.Add(new ListItem(sName, _iPerId.ToString()));
        sbData.AppendFormat("<td><input class=\"studentCheckBox\" type=\"checkbox\" onClick=\"UpdateSelectedCounter()\" id={0} name=\"{1}\" value={0}>{1}</td>", _iPerId, sName);
        iColumnCounter++;
    }

    sbData.Append("</tr>");
    sbData.Append("</table>");

名称已按字母顺序排序,但正如您所见,这会将它们从左到右输入,跳过一列。当它达到 4 列时,它将转到下一行。

我希望它从上到下在一列中,然后到下一列,所以它会像

______
|A|C|L|
|A|F|N|
|C|K|N|

想象这些字母是人的第二个名字的第一个字母。

4

1 回答 1

1

如果您想要一个 4x4 表,按字母顺序向下,则索引如下:

*/
[0][4][8][12]
[1][5][9][13]
[2][6][10][14]
[3][7][11][15]
*/

所以你想要做的是这样的:

 sbData.Append("<table>");
    int iColumnCounter = 0;
    sbData.Append("<tr>");

    for(int i = -4; i < lsiPeople.count; )
    {
        iColumnCounter++;
        i+=4;
        if(5 == iColumnCounter)
        {
            iColumnCounter = 1;
            i = i - 15;//we want the index to go back to start of next row
            sbData.Append("</tr><tr>");
        }
        string sName = GetPersonName(i);
        DropDownList_Student.Items.Add(new ListItem(sName, _iPerId.ToString()));
        sbData.AppendFormat("<td><input class=\"studentCheckBox\" type=\"checkbox\" onClick=\"UpdateSelectedCounter()\" id={0} name=\"{1}\" value={0}>{1}</td>", _iPerId, sName);
    }

    sbData.Append("</tr>");
    sbData.Append("</table>");
于 2012-11-26T11:22:34.783 回答