استفاده از نمودار چند ستونی برای یک مجموعه در #C

شنبه 18 مهر 1394

در بعضی مواقع یک چارت می تواند درک اطلاعات را آسان تر کند. اما چرا کنترل چارت برای نمایش چند ستون از اشیا مجموعه دشوار می باشد. در این پست نشان خواهیم داد که چگونه می توانیم برای اطلاعات عددی خود، یک نمودار ایجاد کنیم.

استفاده از نمودار چند ستونی برای یک مجموعه در #C

اگر یک gridview در برنامه داشته باشید و  datasourse آن را  به یک مجموعه عددی یا قابل شمارش متصل کنید، داده ها مستقیما نمایش داده خواهند شد. مانند تصویر زیر:

اما، خواندن هر یک از جزئیات در این اطلاعات به دلیل فقط متن بودن آنها مشکل می باشد.

اضافه کردن نمودار کار ما را بسیار آسان تر خواهد کرد.

بنابراین می توانیم DataSource را تنظیم کنیم و DataBind را فراخوانی کنیم، اما نیاز به گفتن اینکه از چه ویژگی ای برای چه چیزی استفاده می شود، می باشد.

استفاده از نمودار تک ستونی آسان است. Series.XValueMember را برای نام ویژگی در کلاس برای محور X، و Series.YValueMembers برای محور Y. 

بنابراین تنها کافیست YValueMembers  را برای چند نام تنظیم کنید.

به این نکته توجه کنید:

Property Value
Type: System.String

ستونهای عضو DataSource برای اتصال داده به سری Y می باشد و این ویژگی برای جدا کردن نام ها یا مقادیر ارزشی ستون ها، از کاما استفاده می کند.

بنابراین تنها کافیست به اینصورت عمل کنیم:

s.YValueMembers = "Delta,Average";

پیاده سازی نمودار

اینکار بسیار آسان است و تنها نیاز به یک متد برای بررسی خصوصیات می خواهد:

public void Load<T>(IEnumerable<T> data, string xColumn = null,
SeriesChartType chartType = SeriesChartType.Line)
    {
    Series.Clear();
    PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(typeof(T));
    if (properties.Count == 0) return;
    if (xColumn == null) xColumn = properties[0].Name;
    Series s;
    foreach (PropertyDescriptor property in properties)
        {
        if (property.Name != xColumn)
            {
            bool include = true;
            foreach (Attribute attribute in property.Attributes)
                {
                DescriptionAttribute desc = attribute as DescriptionAttribute;
                if (desc != null && desc.Description == "No Chart")
                    {
                    include = false;
                    break;
                    }
                }
            if (include)
                {
                s = new Series();
                s.XValueMember = xColumn;
                s.YValueMembers = property.Name;
                s.ChartType = chartType;
                s.LegendText = property.DisplayName;
                Series.Add(s);
                }
            }
        }
    DataSource = data;
    DataBind();
    }


در بالا برای هر ویژگی نمودار در کلاس، یک سری جدید ساخته می شود. همه نام ها خوانده می شوند و ویژگی Description برای همه آن ها برای دیدن بررسی می شود. و همینطور ایجاد یک سری برای هریک از همه دیگری ها.

در فایل برنامه یک demo وجود دارد که این را که براساس یک کلاس واقعی و کد واقعی می باشد را نشان می دهد.

public class NasEntry
    {
    private User _User;
    private DateTime _Date;
    private int _Hits;
    private int _Delta;
    private int _Average;
    private int _D10MovingAverage;
    private int _D30MovingAverage;

    public DateTime Date
        {
        get { return _Date; }
        set { _Date = value; }
        }
    [DescriptionAttribute("No Chart")]
    public User User
        {
        get { return _User; }
        set { _User = value; }
        }
    [DescriptionAttribute("No Chart")]
    public int Hits
        {
        get { return _Hits; }
        set { _Hits = value; }
        }
    public int Delta
        {
        get { return _Delta; }
        set { _Delta = value; }
        }
    public int Average
        {
        get { return _Average; }
        set { _Average = value; }
        }
    [DisplayName("10 Day Av")]
    public int D10MovingAverage
        {
        get { return _D10MovingAverage; }
        set { _D10MovingAverage = value; }
        }
    [DisplayName("30 Day Av")]
    public int D30MovingAverage
        {
        get { return _D30MovingAverage; }
        set { _D30MovingAverage = value; }
        }

می توانید User و Hits را به همراه ویژگی Description از "No Chart"ببینید که مانع وجود آنها به عنوان بخش های نمودار می شود. همچنین توجه داشته باشید مقدار DisplayName جایگزین خصوصیت name نمودار بعنوان شرح نمودار می شود.

بنابراین باید، یک کلاس ایجاد کرده و یک مجموعه قابل شمارش شامل مقادیر ایجاد کنید و ومتد EnumerableChart.Load را فراخوانی کنید.

myChart.Load(myListOfItems);

آموزش سی شارپ

فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان
  • C#.net
  • 3k بازدید
  • 2 تشکر

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید