如何将列值设置为 GridView 列?
How can I set column values to GridView Columns?
我有这样的 csv 文件:
我需要用 gridview 显示这个 csv 文件。但我必须像这样更改格式:
我必须 select 仅区分日期和装载列,并在 gridview 列上使用日期值。
如何将 csv 文件的值用于 Gridview 列?
假设读取 CSV 文件不是问题,并且您已经有类似 List<ClassName>
、DataTable
或 List<string[]>
的内容。我假设它是一个 List<String[]>
,其中第一个 "column" 是 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
的数据源。下面是使用每天的动态列创建 table 的代码:
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 查询并填充 table:
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();
我有这样的 csv 文件:
我需要用 gridview 显示这个 csv 文件。但我必须像这样更改格式:
我必须 select 仅区分日期和装载列,并在 gridview 列上使用日期值。
如何将 csv 文件的值用于 Gridview 列?
假设读取 CSV 文件不是问题,并且您已经有类似 List<ClassName>
、DataTable
或 List<string[]>
的内容。我假设它是一个 List<String[]>
,其中第一个 "column" 是 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
的数据源。下面是使用每天的动态列创建 table 的代码:
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 查询并填充 table:
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();