Использование StringBuilder с DataSet для построения динамической таблицы - PullRequest
3 голосов
/ 12 января 2012

Я использую StringBuilder для динамического построения таблицы из набора данных.Он состоит из двух частей: одна для создания меток, их размеров и порядка столбцов.Эта часть у меня уже работает.Я застрял на том, как получить столбцы с «значениями», а затем добавить строку для завершения построения таблицы.

Есть 25 столбцов, но обычно в таблице только 17 или около того.Мне также нужно отфильтровать первый столбец.У меня проблемы с пониманием, как это сделать.Это то, что я до сих пор.Все, что он делает, это вытаскивает первое значение в DS.Я также могу изменить номер индекса, но в этом случае я не могу этого сделать, поскольку номер и индекс каждого столбца неизвестны.

            DataSet valuesSet = getBlendInfo.GetProcessValues(reqID);

            foreach (DataRow dRow in valuesSet.Tables[0].Rows)
            {
                tblString.Append("<td>");
                tblString.Append(dRow[0].ToString());
                tblString.Append("</td>");
            }

Ответы [ 3 ]

3 голосов
/ 12 января 2012

вам просто нужно использовать вложенный цикл, что-то вроде этого:

foreach (DataRow row in table.Rows)
{
    tblString.Append("<tr>");

    for (int i = 0; i < table.Columns.Count; i++)
    {
        tblString.Append("<td>");
        tblString.Append(row[i].ToString());
        tblString.Append("</td>");
    }

    tblString.Append("</tr>");
}

проверьте null перед чтением с row[i]

2 голосов
/ 12 января 2012

Попробуйте:

DataSet valuesSet = getBlendInfo.GetProcessValues(reqID);
foreach (DataRow dRow in valuesSet.Tables[0].Rows)
{
    bool firstColumn = true;
    foreach (DataColumn dbColumn in valuesSet.Tables[0].Columns)
    {
        if (firstColumn)
            firstColumn = false;
        else
        {
            tblString.Append("<td>");
            tblString.Append(dRow[dbColumn].ToString());
            tblString.Append("</td>");
        }
    }
}
0 голосов
/ 12 января 2012
//This way you can create a row with the column names
blString.Append("<tr>");

foreach(var col in valuesSet.Tables[0].Columns)
{
    tblString.Append("<td>");
    tblString.Append(col.ToString());
    tblString.Append("</td>");
}

blString.Append("</tr>");
...