Custom DataBind .Net Chart Control

Bir sürelik anlama ve kavrama aşamasından sonra ufak tefek de olsa ms Chart control üzerinde bir iki demo ve nihai entegre çalışan bir grafik yapabildim 🙂 Msdn ve ms Chartın sample dosyaları aslında simple olarak data binding işlemlerine sahip kodlar içermekte. Yanlız benim gelen verim birazdaha komplex yapıda idi bind ederken taklalar atmak ve performansdan da ödün vermek gerekecek idi.

Ama uygulamadaki grafik local based çalışacağı için bir sıkıntı yaratmıyacağını düşünerekten kolları sıvadım.

Öncelikle ihtiyacım olan bir grid kontrol birde chart kontrolu default.aspx e koyuyoruz.

 
        
        

genel manada yukarıda belirtilen özellikleri biraz kurcalıyarak öğrenmek mümkün hala hepsinin ne manaya geldiklerini ben de bilmiyorum ama işime yaradığı gerçek 🙂 neye yaradığını ezberlemem gerekmiyor . En güzel özelliği satırı. Gerçek 3d değil ama görsellik yönünden güzel grafik çıktısı vermekte.


 DatabaseConnector db = new DatabaseConnector();



    public void bindR(string pno, DateTime tarih)
    {



        SqlDataReader dr = db.GenelDoluReader("SELECT     * FROM         dbo.ko INNER JOIN     dbo.ko2 ON dbo.ko.guid = dbo.ko2.guid1 WHERE     (dbo.ko.pno = "+pno+") AND (dbo.ko.btarih ='"+tarih.ToString("yyyy-MM-dd")+"') ORDER BY dbo.ko2.tarih");




        DataView ds = db.GenelDataSource("SELECT     * FROM         dbo.ko INNER JOIN     dbo.ko2 ON dbo.ko.guid = dbo.ko2.guid1 WHERE     (dbo.ko.pno = "+pno+") AND (dbo.ko.btarih ='"+tarih.ToString("yyyy-MM-dd")+"') ORDER BY dbo.ko2.tarih");



        GridView1.DataSource = ds;
        GridView1.DataBind();
        Chart1.ChartAreas["ChartArea1"].AxisX.Maximum = 13;
        Chart1.ChartAreas["ChartArea1"].AxisX.Minimum =0;
        Chart1.ChartAreas["ChartArea1"].Area3DStyle.LightStyle = LightStyle.Realistic;

 
 
        for (int i = 0; i < = GridView1.Rows.Count - 1; i++)
        {
           CustomLabel cl = new CustomLabel();


            if (GridView1.Rows.Count == 0)
            {
                cl.Text = "0";
//       her ihtimale kadıkoy debug etmek için veri olmadıgında bir tane text yaratmak ıcın  benım datamda bos gelme ıhtımalı yok cunku dolu olmak zorunda hepsı .
            }
            else
            {
cl.Text = GridView1.Rows[i].Cells[0].Text.Substring(0, 10);
      }    
           cl.FromPosition = i  + 0.8;
            cl.ToPosition = cl.FromPosition + 0.8;
            cl.Name = "cl" + i;


            Series s = new Series();
            s.Name = "r" + i;

         
            s.CustomProperties = "DrawingStyle=Cylinder";
            s.IsValueShownAsLabel = true;
            s.AxisLabel = cl.Name;
           
          

            Chart1.Series.Add(s);
  

            Chart1.ChartAreas["ChartArea1"].AxisX.CustomLabels.Add(cl);
          
        }



        if (ds.Count == 0)
        {
            Chart1.Series["r0"].Points.AddY(0);
          
            Chart1.DataManipulator.Group("AVE", 1, IntervalType.Days, "r0", "r1");

        }
        else
        { 
        
          Chart1.Series["r0"].Points.DataBindY(ds, "r1");

            Chart1.Series["r1"].Points.DataBindY(ds, "r2");
            Chart1.Series["r2"].Points.DataBindY(ds, "r3");
            Chart1.Series["r3"].Points.DataBindY(ds, "r4");
            Chart1.Series["r4"].Points.DataBindY(ds, "r5");

        }
    
    }

Aslında sadece yaptığımız bır iki şeye elle müdahale etmekten başka bir şey değil sonuç olarak aşağıdaki çıktı elimize gelicektir.

Leave a Reply