2015-05-18 100 views
1

我有CSV文件是這樣的:如何將列值設置爲GridView列?

enter image description here

我需要顯示與GridView控件這個csv文件。但是,我必須改變格式是這樣的:

enter image description here

我必須選擇不同的只是日期和安裝在GridView的列柱和使用日期值。

如何爲Gridview列使用csv文件的值?

+0

如何讀取CSV文件?是你的問題的一部分,還是你已經像'List '或'DataTable'或者'List '這樣的東西? –

+0

我使用'Sqldatasource'和'Odbc'沒有代碼。 – phe

+0

所以你想要一些樞軸,行到列?這些日子是否已知? –

回答

2

假設讀取CSV文件不是問題,並且您已經有類似List<ClassName>,DataTableList<string[]>的東西。我假定這是一個List<String[]>,其中第一個「列」是Date,第二個Mount和最後一個%在我的以下方法。

你需要真實DateTime S和int s到能夠按日期總結百分比:

var formatProvider = new CultureInfo("de-DE"); // seems to be the correct format 

var mountGroups = listOfStringArray 
    .Select(arr => new 
    { 
     Date = DateTime.Parse(arr[0].Trim(), formatProvider).Date, 
     Mount = arr[1].Trim(), 
     Percent = int.Parse(arr[2].Trim()) 
    }) 
    .GroupBy(x => x.Mount); 

現在你已經通過Mount分組,你只需要總結的百分比的每一天。您可以使用DataTable作爲GridView的數據源。這裏是與每天的動態列創建表的代碼:

var dataSource = new DataTable(); 
dataSource.Columns.Add("Mount"); 
var lastWeekColumns = Enumerable.Range(0, 7) 
    .Select(d => new DataColumn(DateTime.Today.AddDays(-6 + d).ToShortDateString(), typeof(int))) 
    .ToArray(); 
dataSource.Columns.AddRange(lastWeekColumns); 

以下循環執行LINQ查詢和填充表:

foreach(var grp in mountGroups) 
{ 
    DataRow row = dataSource.Rows.Add(); 
    row.SetField("Mount", grp.Key); // because: GroupBy(x => x.Mount); 
    foreach(DataColumn dayCol in lastWeekColumns) 
    { 
     DateTime day = DateTime.Parse(dayCol.ColumnName, formatProvider); 
     int sumPercent = grp.Where(x => x.Date == day) 
      .Select(x => x.Percent) 
      .DefaultIfEmpty(0) // fallback value for missing days 
      .Sum(); 
     row.SetField(dayCol, sumPercent); 
    } 
} 

現在,你只需要使用它作爲數據源(AuthoGenerateColumns設置爲true

grid.DataSource = dataSource; 
grid.DataBind(); 
相關問題