asp:ListBox在我的值的末尾添加零(使用来自数据库的float)

本文关键字:float 数据库 添加 ListBox 我的 asp | 更新日期: 2023-09-27 17:53:21

我最近被分配去更新一个使用asp:listbox控件的老项目(我不是很擅长处理)。

设置是将ListBox放置在aspx上。页,并通过DataSource属性用数据填充自身。填充ListBox的列数据库表是activity_points(数据类型为float)和activity_title(数据类型为string/varchar)。列表框被填满了,一切看起来都很好,直到我检查列表项的值。

列表框如下图

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

我没有选择了,是不是我错过了列表框的神奇之处?

任何建议都是非常感谢的!

谢谢

asp:ListBox在我的值的末尾添加零(使用来自数据库的float)

似乎列表框的值总是获得整数的增量值