PullRequest
       25

0 голосов
/ 28 апреля 2011

Мне недавно было поручено обновить старый проект, использующий элемент управления asp: listbox (с которым я не очень хорошо справляюсь).

Настройка состоит в том, что ListBox помещается на страницу aspx.page и заполняется данными через атрибут DataSource. Таблица базы данных столбцов, заполняющая ListBox, представляет собой activity_points (тип данных с плавающей запятой) и activity_title (тип данных строка / varchar). ListBox заполняется, и все выглядит хорошо, пока я не проверю значение элементов списка.

ListBox выглядит следующим образом

<asp:ListBox runat="server" DataSource="<%# GetActivitys(1) %>" DataTextField="activity_title"
DataValueField="activity_points" EnableViewState="true" onchange="DataChanged();SumUpRow(this,true);"
Width="200" CssClass="ddl-activity1" ID="activities_1_1" Rows="1" />

Метод по умолчанию (который я унаследовал) выглядит следующим образом

public SqlDataReader GetActivitys(int type)
{
    SqlConnection conn = new SqlConnection(umbraco.GlobalSettings.DbDSN);
    SqlCommand cmd = new SqlCommand("SELECT * FROM " + DATABASE_TABLE_ACTIVITIES + " WHERE activity_type=" + type.ToString() + " ORDER BY activity_type, activity_sortorder, activity_title", conn);
    cmd.Connection.Open();
    return cmd.ExecuteReader(CommandBehavior.CloseConnection);
}

Сгенерированные элементы списка выглядят так

<option value="6">testing</option>
<option value="9">testing</option>
<option value="6,5">testing</option>
<option value="5">testing</option>
<option value="7">testing</option>
<option value="4,5">testing</option>
<option value="6.0">testing</option>
<option value="4">testing</option>
<option value="3.0">testing</option>
<option value="6.00">testing</option>
<option value="3,5">testing</option>
<option value="6.000">testing</option>

Как ясно видно, он смешивает точки и запятые и добавляет ноль после каждого вхождения, если повторяется одно и то же значение. Если я отображаю тот же набор результатов в GridView, все выглядит отлично!

Просто чтобы убедиться, что данные, возвращаемые из базы данных, верны, я создал новый метод, который преобразует столбец activity_points

public DataTable GetActivitys(int type)
{
    string query = "SELECT activity_points, activity_title, activity_id FROM " + DATABASE_TABLE_ACTIVITIES + " WHERE activity_type=" + type.ToString() + " ORDER BY activity_type, activity_sortorder, activity_title";
    SqlConnection conn = new SqlConnection(umbraco.GlobalSettings.DbDSN);
    SqlDataAdapter da = new SqlDataAdapter(query, conn);
    DataTable dt = new DataTable();
    da.Fill(dt);

    /**/

    DataTable dtActivity = new DataTable();
    DataColumn ActivityCol;

    ActivityCol = new DataColumn();
    ActivityCol.DataType = Type.GetType("System.String");
    ActivityCol.ColumnName = "activity_points";
    dtActivity.Columns.Add(ActivityCol);

    ActivityCol = new DataColumn();
    ActivityCol.DataType = Type.GetType("System.String");
    ActivityCol.ColumnName = "activity_title";
    dtActivity.Columns.Add(ActivityCol);

    ActivityCol = new DataColumn();
    ActivityCol.DataType = Type.GetType("System.Int32");
    ActivityCol.ColumnName = "activity_id";
    ActivityCol.Unique = true;
    dtActivity.Columns.Add(ActivityCol);


    foreach (DataRow item in dt.Rows)
    {
        DataRow activityRow = dtActivity.NewRow();
        activityRow["activity_points"] = Convert.ToDouble(item["activity_points"]);
        activityRow["activity_title"] = item["activity_title"];
        activityRow["activity_id"] = item["activity_id"];

        dtActivity.Rows.Add(activityRow);
    }

    return dtActivity;
}

У меня заканчиваются опции, есть ли что-то волшебное в ListBoxes, которое я пропустил?

Любой совет высоко ценится!

Спасибо

1 Ответ

0 голосов
/ 29 ноября 2011

Похоже, что значения списка всегда получают инкрементное значение целого числа

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...