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 に答える