2013-03-21 35 views
5

Tôi đang cố gắng đa biểu đồ thanh loạt dựa trên "Tên" nhưng nó ném một lỗiđa loạt biểu đồ thanh kiểm soát Chart NET

The chart area contains incompatible chart types. For example, bar charts and column charts cannot exist in the same chart area.

Đây là mã của tôi:

  Chart1.Series["Series1"].ChartType = SeriesChartType.Bar; 
      Chart1.Series["Series1"]["DrawingStyle"] = "Emboss"; 
      Chart1.ChartAreas["ChartArea1"].Area3DStyle.Enable3D = false; 
      Chart1.Series["Series1"].IsValueShownAsLabel = true; 

      DataTable dt = new DataTable(); 
      DataColumn dc; 

      dc = new DataColumn(); 
      dc.ColumnName = "Name"; 
      dt.Columns.Add(dc); 

      dc = new DataColumn(); 
      dc.ColumnName = "Question"; 
      dt.Columns.Add(dc); 

      dc = new DataColumn(); 
      dc.ColumnName = "Marks"; 
      dt.Columns.Add(dc); 

      DataRow dr; 
      dr = dt.NewRow(); 
      dr["Name"] = "Fred"; 
      dr["Question"] = "2D"; 
      dr["Marks"] = "54"; 
      dt.Rows.Add(dr); 
      dr = dt.NewRow(); 
      dr["Name"] = "Bill"; 
      dr["Question"] = "3D"; 
      dr["Marks"] = "66"; 
      dt.Rows.Add(dr); 
      dr = dt.NewRow(); 
      dr["Name"] = "Rhona"; 
      dr["Question"] = "4D"; 
      dr["Marks"] = "32"; 
      dt.Rows.Add(dr); 
      dr = dt.NewRow(); 
      dr["Name"] = "Peter"; 
      dr["Question"] = "5D"; 
      dr["Marks"] = "46"; 
      dt.Rows.Add(dr); 

      var IEtable = (dt as System.ComponentModel.IListSource).GetList(); 

      Chart1.DataBindTable(IEtable, "Name"); 

và Đánh dấu lên là,

<asp:Chart ID="Chart1" runat="server" Width="850px" Height="500px" > 

          <Series> 
            <asp:series Name="Series1" ChartArea="ChartArea1"></asp:series> 
          </Series> 
          <ChartAreas> 
            <asp:ChartArea Name="ChartArea1"> 
            </asp:ChartArea> 
          </ChartAreas> 
        </asp:Chart> 

tôi đang tìm kiếm một đầu ra như thế nào,

enter image description here

đâu thanh màu đại diện cho "Names"

+1

bạn đang nghĩ để đặt câu hỏi, và những gì dòng là lỗi xảy ra – Kcvin

+0

Nó phải là trong khi ràng buộc; Không sử dụng trình gỡ lỗi vì nó SharePoint ứng dụng. – Rishi

+0

@Alison, tôi đã chỉnh sửa câu hỏi của mình..Tôi tin rằng biểu đồ này là có thể. – Rishi

Trả lời

3

này chắc chắn là có thể, và bạn sẽ có thể để tạo ra một biểu đồ trông như thế này: enter image description here

Đoạn mã dưới đây sẽ nhận được những gì bạn nhu cầu:

aSPX

 <asp:Chart ID="Chart1" runat="server" Palette="SeaGreen" BackColor="LightGray" Width="654px"> 
      <Series> 

      </Series> 
      <ChartAreas> 
       <asp:ChartArea Name="ChartArea1" AlignmentOrientation="Horizontal"> 
       </asp:ChartArea> 
      </ChartAreas> 
     </asp:Chart> 

C#

 //Build Sample Data DataTable 
     DataTable dt = new DataTable(); 
     DataColumn dc; 

     dc = new DataColumn(); 
     dc.ColumnName = "Name"; 
     dt.Columns.Add(dc); 

     dc = new DataColumn(); 
     dc.ColumnName = "Question"; 
     dt.Columns.Add(dc); 

     dt.Columns.Add("Marks", typeof(int)); 

     string question = "2D"; 

     DataRow dr; 
     dr = dt.NewRow(); 
     dr["Name"] = "Fred"; 
     dr["Question"] = question; 
     dr["Marks"] = 54; 
     dt.Rows.Add(dr); 
     dr = dt.NewRow(); 
     dr["Name"] = "Bill"; 
     dr["Question"] = question; 
     dr["Marks"] = 66; 
     dt.Rows.Add(dr); 
     dr = dt.NewRow(); 
     dr["Name"] = "Rhona"; 
     dr["Question"] = question; 
     dr["Marks"] = 32; 
     dt.Rows.Add(dr); 
     dr = dt.NewRow(); 
     dr["Name"] = "Peter"; 
     dr["Question"] = question; 
     dr["Marks"] = 46; 
     dt.Rows.Add(dr); 

     question = "4D"; 
     dr = dt.NewRow(); 
     dr["Name"] = "Fred"; 
     dr["Question"] = question; 
     dr["Marks"] = 89; 
     dt.Rows.Add(dr); 
     dr = dt.NewRow(); 
     dr["Name"] = "Bill"; 
     dr["Question"] = question; 
     dr["Marks"] = 99; 
     dt.Rows.Add(dr); 
     dr = dt.NewRow(); 
     dr["Name"] = "Rhona"; 
     dr["Question"] = question; 
     dr["Marks"] = 28; 
     dt.Rows.Add(dr); 
     dr = dt.NewRow(); 
     dr["Name"] = "Peter"; 
     dr["Question"] = question; 
     dr["Marks"] = 44; 
     dt.Rows.Add(dr); 

     question = "3D"; 
     dr = dt.NewRow(); 
     dr["Name"] = "Fred"; 
     dr["Question"] = question; 
     dr["Marks"] = 26; 
     dt.Rows.Add(dr); 
     dr = dt.NewRow(); 
     dr["Name"] = "Bill"; 
     dr["Question"] = question; 
     dr["Marks"] = 89; 
     dt.Rows.Add(dr); 
     dr = dt.NewRow(); 
     dr["Name"] = "Rhona"; 
     dr["Question"] = question; 
     dr["Marks"] = 73; 
     dt.Rows.Add(dr); 
     dr = dt.NewRow(); 
     dr["Name"] = "Peter"; 
     dr["Question"] = question; 
     dr["Marks"] = 14; 
     dt.Rows.Add(dr); 

     //Sort the datatable 
     DataView dv = dt.DefaultView; 
     dv.Sort = "Question ASC, Name ASC"; 
     dt = dv.ToTable(); 

     DataTable table = new DataTable(); 
     table.Columns.Add("Question", typeof(string)); 
     foreach (DataRow dr2 in dt.Rows) 
     { 
      //Add user Names to DataTable table 
      if (!table.Columns.Contains(dr2["Name"].ToString())) { 
       table.Columns.Add(dr2["Name"].ToString(), typeof(int)); 
      } 

      //Add empty Question rows to DataTable 
      if (table.AsEnumerable().Where(x => x.Field<string>("Question") == dr2["Question"].ToString()).Count() == 0) 
      { 
       table.Rows.Add(dr2["Question"].ToString()); 
      } 
     } 

     // Loop through all columns and questions and then calculate the mark 
     for (int i = 1; i < table.Columns.Count;i++) 
     { 
      for (int j = 0; j < table.Rows.Count; j++) 
      { 
       string questionName = table.Rows[j][0].ToString(); 
       for (int k = 0; k < dt.Rows.Count; k++) 
       { 
        string userName = table.Columns[i].ColumnName; 
        table.Rows[j][i] = dt.AsEnumerable().Where(x => x.Field<string>("Name") == userName).Where(y=>y.Field<string>("Question") == questionName).Sum(r => r.Field<int>("Marks")); 
       } 
      } 
     } 

     Chart1.Series[seriesName].ChartType = SeriesChartType.Bar; 

     //convert datatable to a IEnumerable form 
     var IEtable = (table as System.ComponentModel.IListSource).GetList(); 

     Chart1.DataBindTable(IEtable, "Question"); 
+0

Tôi làm cách nào để nhóm dữ liệu như bạn đã nói. Dữ liệu của tôi sẽ động và tôi sẽ tạo bảng dữ liệu trong thời gian chạy. Vì vậy, bảng dữ liệu sẽ là một cái gì đó như tôi đã đề cập trong câu hỏi của tôi. – Rishi

+0

Tôi có thể không giải thích rõ cấu trúc dữ liệu của mình .. Hãy để tôi thử lại .. Sẽ có cùng một tập hợp dữ liệu cho mỗi người dùng. Ví dụ: trường Câu hỏi và Đánh dấu sẽ giống nhau cho mọi người dùng. Do đó, Dữ liệu của tôi phải là, Người dùng 1 ---------- Câu hỏi | Nhãn hiệu 2D | 30 3D | 40 Người dùng 2 ------- 2D | 70 3D | 90 – Rishi

+0

@Rishi: Tôi đã cập nhật câu trả lời của mình bằng mã hoàn toàn mới. Nó hoạt động với dữ liệu khi bạn có nó để tạo ra kết quả mong muốn. –

Các vấn đề liên quan