Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.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
C# 使用csv文件绑定图表会产生错误_C#_Linq_Csv_Data Binding_Charts - Fatal编程技术网

C# 使用csv文件绑定图表会产生错误

C# 使用csv文件绑定图表会产生错误,c#,linq,csv,data-binding,charts,C#,Linq,Csv,Data Binding,Charts,我正在使用C#在Visual Studio 12 ASP.net中编写代码。我的csv中有这样的数据 ID, Engine Type, Car, 111,vtec, 1, 131,vtec, 1, 157,boxer,1, 148,boxer,1, 167,vtec,1, 158,,0, 107,,0, 我这样做是为了把它列入一个清单 var testingobject = from line in File.ReadAllLines("testingparttwo.csv").Skip(1)

我正在使用C#在Visual Studio 12 ASP.net中编写代码。我的csv中有这样的数据

ID, Engine Type, Car,
111,vtec, 1,
131,vtec, 1,
157,boxer,1,
148,boxer,1,
167,vtec,1,
158,,0,
107,,0,
我这样做是为了把它列入一个清单

var testingobject = from line in File.ReadAllLines("testingparttwo.csv").Skip(1)    
                        let parts = line.Split(',')               
                        select new CarClass()
                        {
                            Id = Int32.Parse(parts[0]),
                            Engine_Type = parts[1],
                            Car = Int32.Parse(parts[2])
                        };
    var mynewlist = testingobject.ToList();
然后,我绑定了一个下拉列表,其中包含ID、引擎类型和汽车作为选择,只使用我手动创建的列表

然后,在用户单击Car之后,我想将适当的数据绑定到图表(列或饼图,只要我看到一个可视化的图标就行)。1和0表示客户是否有车(1)或没有车(0)。我想看看有多少不同类型的发动机类型,并得到一个视觉上。根据数据,有3名VTEC和2名拳击手

这是我选择后的下拉列表更改代码为:

 protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{

    string tempy = DropDownList1.Text;

    var testingobject = from line in File.ReadAllLines("testingparttwo.csv").Skip(1)
                        let parts = line.Split(',') 
                        select new CarClass()
                        {
                            Id = Int32.Parse(parts[0]),
                            Engine_Type = parts[1],
                            Car = Int32.Parse(parts[2])
                        };
    var myseconedlist = testingobject.ToList();

    if (tempy == "Car")
    {
        var myfavitems = myseconedlist.Where(a => a.Car == 1).ToList();
        foreach (var t in myfavitems.GroupBy(a => a.Engine_Type))
        {
          Series Series1 = new Series();
          Chart1.Series.Add(Series1);
          Chart1.DataSource = myfavitems.AsEnumerable();
          Chart1.Series[0].Points.ADDXY(t.key,t.count()); //this doesnt work!!
          Chart1.Series[0].XValueMember = "Engine Type";
          Chart1.Series[0].YValueMembers = "Car";
          Chart1.DataBind();
因此,每当我绑定它时,它总是产生一个关于t.key和t.count的错误。ADDXY需要双值,而不是t.key,t.count()


我如何绑定它?

我解决这个问题的方式,对于那些仍然想知道我是如何做到的人: 因为GROUPBY语句生成一个区分VTEC和BOXER的键。我使用了这种区别,并将我的列表作为datagrid的数据源发布

GridView1.DataSource = myfavitems;
        GridView1.DataBind();
现在,在我的例子“myfavitems”列表中,该表将仅按列表中的项目显示分组。现在,csv文件中的所有剩余值都已排除,并且您只能看到已通过Groupby子句过滤的值,因此将datagrid绑定到图表变得很容易

Series Series1 = new Series();
Chart1.Series.Add(Series1);
Chart1.Series[0].XValueMember = "Engine Type";
Chart1.Series[0].YValueMembers = "Car";
Chart1.DataSource = GridView1.DataSource;
Chart1.DataBind();
您可以在Chart1.Databind之后添加另一条语句,以区分正在使用的键

Chart1.Series[0].Points.AddXY("" + myword + "", t.Count());
Chart1.Series[0].PostBackValue = "#VALX, #VAL";
myword是一个存储以下内容的变量:

string myword = t.Key.AsEnumerable().ToString();
t是遍历myfavitems.groupby子句的变量

我还禁用了datagrid,因此无法查看数据。 希望这能有所帮助