2017-02-21 9 views
0

У меня есть коллекция данных в таблице базы данных MySQL, которую я пытаюсь отобразить в DataGrid в модуле ascx с использованием C#. Значения в таблице базы данных хранятся как float. Я столкнулся с проблемой, когда я выводил данные из таблицы базы данных в свой DataGrid (т. Е. Если значение в базе данных равно 3.30, мой DataGrid показывает это как 3.3). Я хотел бы, чтобы значения в DataGrid показывались в 2 десятичных знаках. Если в таблице базы данных указано значение 3.00, я хочу, чтобы это же значение отображалось и в моей таблице DataGrid.Модуль C# ASCX DataGrid не отображает значения в 2 десятичных знака из таблицы базы данных MySQL-Workbench

Я сделал довольно обширный поиск в Интернете и здесь, в stackoverflow. Я нашел несколько похожих вопросов, таких как C# WPF DataGrid doesn't show decimal from SQLite 3 database, но это было не полезно для того, что я пытался сделать.

Ниже приведен мой код для моих ascx и ascx.cs. Любая помощь в решении этой проблемы будет принята с благодарностью.

ASCX код

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

ответ

0

Похоже, что Вы используете неправильный DataFormatString значение ... Ниже вы должны получить идти.

DataFormatString="{0:0.00}"

Вы можете увидеть больше here.

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(); 
+0

Я попробовал ваше предложение, но он ничего не делает, значение по-прежнему отображается как 3 вместо 3,00, как я хочу. Есть ли способ, которым я могу заставить нули появляться на экране, чтобы 3 был вынужден отображать 3,00? – skaur

+0

Хорошо, что происходит, когда вы переходите через свой код? Что делает 'r [0] = tbl.Columns [col] .ToString();' выглядеть после выполнения этой строки? Приведенный выше код определенно содержит два десятичных знака для float, double и т. Д., Которые выводятся из базы данных, и я просто смог подтвердить это (со значением 3,00). Это тоже может быть вашим преступником. – ragerory

+0

Я заработал. Мне пришлось изменить 'r [0] = tbl.Columns [col] .ToString();' to 'r [0] = tbl.Columns [col] .ReadOnly ;, который затем показывал значения до двух десятичных значений. – skaur

Смежные вопросы