Asp.net 如何将列值设置为GridView列?
我有如下csv文件: 我需要用gridview显示这个csv文件。但我必须这样改变格式: 我必须选择distinct just date和mount列,并在gridview列上使用日期值Asp.net 如何将列值设置为GridView列?,asp.net,csv,gridview,Asp.net,Csv,Gridview,我有如下csv文件: 我需要用gridview显示这个csv文件。但我必须这样改变格式: 我必须选择distinct just date和mount列,并在gridview列上使用日期值 如何将csv文件的值用于Gridview列?假设读取csv文件不是问题,并且您已经有了类似于列表、数据表或列表的内容。我假设这是一个列表,在我下面的方法中,第一个“列”是日期,第二个装载,最后一个% 您需要realDateTimes和ints才能按日期求和百分比: var formatProvider =
如何将csv文件的值用于Gridview列?假设读取csv文件不是问题,并且您已经有了类似于
列表
、数据表
或列表的内容。我假设这是一个列表
,在我下面的方法中,第一个“列”是日期
,第二个装载
,最后一个%
您需要realDateTime
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);
现在您已经按装载量进行了分组
,只需将每天的百分比相加即可。您可以使用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
)
如何读取CSV文件?这是您问题的一部分,还是您已经有了类似于List
或DataTable
或List
的东西?我使用Sqldatasource
和Odbc
而不使用代码。所以您想要某种数据透视,从行到列?知道日子吗?知道。但日期值在csv文件中是最后7天(例如:5月12日…5月18日)。它不是静态的。请在第一时间给下一次适当的信息。
grid.DataSource = dataSource;
grid.DataBind();