Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 如何将列值设置为GridView列?_Asp.net_Csv_Gridview - Fatal编程技术网

Asp.net 如何将列值设置为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文件。但我必须这样改变格式:

我必须选择distinct just date和mount列,并在gridview列上使用日期值


如何将csv文件的值用于Gridview列?

假设读取csv文件不是问题,并且您已经有了类似于
列表
数据表
列表的内容。我假设这是一个
列表
,在我下面的方法中,第一个“列”是
日期
,第二个
装载
,最后一个
%

您需要real
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);
现在您已经按
装载量进行了分组
,只需将每天的百分比相加即可。您可以使用
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();