2013-06-14 2 views
0

은 내가 IENumerable<MyClass>의 형태로, 단순한 객체 데이터 소스를 가지고의 MSChart하기 . 나는이 것으로 기대 :데이터 바인딩 ObjectDataSource를이

<asp:Chart runat="server" DataSourceID="datasource"> 
    <Series> 
     <asp:Series XValueMember="Key" YValueMembers="Value1"/> 
     <asp:Series XValueMember="Key" YValueMembers="Value2"/> 
    </Series> 
</asp:Chart> 
<asp:ObjectDataSource ID="datasource" runat="server" SelectMethod="DataObjectMethodName" TypeName="DataObjectClassName"/> 

을 그러나 나는 다음과 같은 예외가 나타납니다이 매핑 데이터 바인딩을 시도 할 때마다 :

Series data points do not support values of MyClass only values of these types can be used: Double, Decimal, Single, int, long, uint, ulong, String, DateTime, short, ushort.

가 나는 또한 내 데이터 소스가 반환 할 시도를 Dictionary<DateTime, Int[]>Dictionary<DateTime, MyClass> , 성공없이.

단순한 디자인 - MSCharts에서 지원되지 않는 복잡한 개체에 대한 시간 데이터 바인딩? 나는 Dictionary<DateTime, int>에 묶을 수 있었다. 결국 StackedColumn 유형의 차트 여야합니다.

이 질문에 답하지 않는 Multiple columns chart using asp.net chart control과 같은 비슷한 질문이 표시됩니다.

답변

0

이 질문은별로 인기가없는 것 같습니다.

실제 데이터 바인딩을 수행 할 수 없었습니다. 디자이너를 계속 사용하려면 방금 해킹을 사용했습니다. 디자이너에게 시리즈를 하나 추가 했으므로 드래그 앤 드롭 편집기를 사용하여 내 인생을 편하게 할 수있었습니다. 필자는 '템플릿'시리즈의 값을 복사했습니다.

 

    //Treat the one designer series as a template 
    var template = chartFares.Series.First(); 
    //Just used for fancying up the designer and adding demo settings 
    chartFares.Series.Clear(); 

    foreach (var series in serieses) 
    { 
     var chartSeries = chartFares.Series.Add(series.Name); 

     //Copy setting from template (better cloning mechanism would also be useful) 
     chartSeries.ChartType = template.ChartType; 
     chartSeries.ToolTip = template.ToolTip; 
     chartSeries.PostBackValue = template.PostBackValue; 

     foreach (var points in series.Data) 
     { 
      chartSeries.Points.AddXY(points.Period, points.Count); 
     } 
    }