簡體   English   中英

C#ASCX模塊DataGrid不顯示MySQL-Workbench數據庫表中小數點后2位的值

[英]C# ASCX Module DataGrid doesn’t show values to 2 decimal places from MySQL-Workbench database table

我正在嘗試使用C#在MySQL數據庫表中顯示一組數據,這些數據正試圖顯示在ascx模塊的DataGrid中。 數據庫表中的值存儲為浮點數。 將數據庫表中的數據顯示到DataGrid中時遇到問題(即,如果數據庫中的值為3.30,則DataGrid將其顯示為3.3)。 我希望將DataGrid中的值顯示為2個小數位。 如果數據庫表顯示的值為3.00,我也希望該值也顯示在DataGrid表中。

我已經在網上進行了廣泛的搜索,在這里也可以找到關於stackoverflow的信息。 我確實發現了一些類似的問題,例如C#WPF DataGrid不在SQLite 3數據庫中顯示小數 ,但這對我嘗試執行的操作沒有幫助。

以下是我的ascx和ascx.cs的代碼。 任何解決此問題的幫助將不勝感激。

ASCII碼

<asp:DataGrid runat="server" ID="MyDataGrid2" Width="50%" BorderColor="Black" ShowFooter="false" CellPadding="4" CellSpacing="2" Font-Names="Verdana" Font-Size="10pt" HeaderStyle-BackColor="#81DAF5" HorizontalAlign="Left" EnableViewState="false" ForeColor="#333333" GridLines="None" AutoGenerateColumns="true">
    <AlternatingItemStyle BackColor="White" />
    <FooterStyle BackColor="#990000" Font-Bold="true" ForeColor="White" />
    <HeaderStyle BackColor="#990000" Font-Bold="true" ForeColor="White" />
    <ItemStyle BackColor="#FFFBD6" ForeColor="#333333" />
    <PagerStyle BackColor="#FFCC66" ForeColor="#333333" HorizontalAlign="Center" />
    <SelectedItemStyle BackColor="#FFCC66" Font-Bold="true" ForeColor="Navy" />
    <Columns>
        <asp:BoundColumn DataField="Score" HeaderText="Score TEST" DataFormatString="{0:C}"></asp:BoundColumn>
    </Columns>
</asp:DataGrid>

ascx.cs代碼

protected static DataTable Pivot1(DataTable tbl)
{
    var tblPivot = new DataTable();
    tblPivot.Columns.Add("Score", typeof(String));
    for (int col = 0; col < tbl.Columns.Count; col++)
    {
        var r = tblPivot.NewRow();
        r[0] = tbl.Columns[col].ToString();
        for (int j = 0; j < tbl.Rows.Count; j++)
        r[j] = tbl.Rows[j][col];
        tblPivot.Rows.Add(r);
    }
    return tblPivot;
}

protected void GroupButton_Click(object sender, EventArgs e)
{
    using (OdbcConnection dbConnection2 = new OdbcConnection(srlsConnStr))
    {
        dbConnection2.Open();                
        OdbcCommand dbCommand5 = new OdbcCommand();
        dbCommand5.Connection = dbConnection2;
        dbCommand5.CommandText = string.Format(@"SELECT TRUNCATE(AVG(s.srls_c1), 2) AS c1_total,
                TRUNCATE(AVG(s.srls_c2), 2) AS c2_total,
                TRUNCATE(AVG(s.srls_c3), 2) AS c3_total,
                TRUNCATE(AVG(s.srls_c4), 2) AS c4_total,
                TRUNCATE(AVG(s.srls_c5), 2) AS c5_total,
                TRUNCATE(AVG(s.srls_c6), 2) AS c6_total,
                TRUNCATE(AVG(s.srls_c7), 2) AS c7_total,
                TRUNCATE(AVG(s.srls_c8), 2) AS c8_total
            FROM srlsvouchergroup g
            JOIN srlsvouchers v ON v.voucher_group_voucher_group_id = g.group_id_pk
            AND v.voucher_status = 'Taken'
            JOIN srlssurvey s ON s.voucher_no = v.Voucher_no_pk
            WHERE g.group_name = ?;");

        dbCommand5.Parameters.AddWithValue("@group_name", inst_group_name);
        OdbcDataReader dataReader5 = dbCommand5.ExecuteReader();

        DataTable dt7 = new DataTable();
        dt7.Load(dataReader5);
        DataTable dt8 = Pivot1(dt7);

        MyDataGrid_2.DataSource = dt8;
        MyDataGrid_2.DataBind();

        dataReader5.Close();
    }
}

您似乎使用了錯誤的DataFormatString值...下面應該可以幫助您。

DataFormatString="{0:0.00}"

你可以在這里看到更多。

UPDATE

看起來可能與您的.ToString(); 它不實現IFormattable

使用如下所示的string.Format(...) ,這將為您提供所需的結果:

static void Main(string[] args)
{
    double test = 3.00;
    Console.WriteLine("number: " + test);

    Console.WriteLine("new number: " + string.Format("{0:0.00}", test));
    Console.ReadLine();
}

輸出:

number: 3
new number: 3.00

因此,您的問題似乎出在此行上,該行會在將其發送到網格之前自動將0截斷:

r[0] = tbl.Columns[col].ToString();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM