[英]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.