2011-12-14 13 views
5

Mam GridView w ASP.NET 2.0 z AutoGenerateColumns ustawiona na true. W czasie wykonywania będzie to związane z DataSet z jednym z wielu możliwych schematów i wolałbym nie ustawiać siatki i kolumn dla każdego możliwego schematu.Formatowanie danych w GridView z AutoGenerateColumns true

Niektóre kolumny w siatce czasami będą wartościami zmiennoprzecinkowymi. Wygląda na to, że domyślne formatowanie liczb zamienia 0.345 na 0.345000. Czy istnieje sposób na zmianę domyślnego formatu liczb, aby dopasować do określonej liczby miejsc po przecinku?

Odpowiedz

4

Można użyć ciągi w schemacie zamiast zmiennoprzecinkowych do celów wystawowych i wykonać formatowanie ręcznie, coś takiego:

EDIT: Bez LINQ, można zrobić to samo, modyfikując wiersze schematu:

// load source data 
DataSet myData = GetDataSet(); 

// create column for formatted data. 
myData.Tables["MyTable"].Columns.Add("AmountFormatted", typeof(string)); 

// apply formatting 
foreach (DataRow dr in myData.Tables["MyTable"].Rows) 
    dr["AmountFormatted"] = string.Format("{0:0.###}", dr["Amount"]); 

// remove source column and replace with formatted column 
myData.Tables["MyTable"].Columns.Remove("Amount"); 
myData.Tables["MyTable"].Columns["AmountFormatted"].ColumnName = "Amount"; 

C#, LINQ-Based rozwiązanie:

var theData = GetDataSchema1(); 
var dataSource = theData.Tables["MyTable"].Select().Select(dr => 
    new { /* select only columns you want displayed, and apply formatting */ 
     MyColumn1 = dr["MyColumn1"], 
     MyColumn2 = dr["MyColumn2"], 
     MyColumn3 = String.format("#.###", dr["MyColumn3"]), 
     MyColumn4 = dr["MyColumn4"], 
     MyColumn5 = dr["MyColumn5"] 
    } 
); 
MyGridView1.DataSource = dataSource; 
MyGridView1.DataBind() 
+0

Pytanie błędnie określiło ASP.NET 4.0. Jestem na 2.0 (pytanie zaktualizowane), więc nie mogę używać LINQ. :-( –

+0

Zobacz zaktualizowany kod. – mellamokb