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

时间:2013-11-28 04:19:24

标签: 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)    
                        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作为选择的下拉列表。

然后在用户点击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()。

如何绑定它?

1 个答案:

答案 0 :(得分:0)

我解决这个问题的方式,对于那些仍然想知道我是怎么做的人是: 由于group by语句产生了一个区分vtec和拳击手的Key。我使用了这种区别并将我的列表作为数据网格的数据源发布。

GridView1.DataSource = myfavitems;
        GridView1.DataBind();

现在,表格只会根据您的列表中的项目“myfavitems”列表显示该组。既然排除了csv文件中的所有剩余值,并且只能看到已经被Groupby子句过滤的值,那么将数据网格绑定到图表变得很容易。

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子句的变量。

我也禁用了数据网格,因此我没有数据的可视化。 希望这可以帮助!!