Custom Search
by  chalitbur   04 Nov 2014
 asp.net  C#  report  graph 

ในบทความนี้จะอธิบายการสร้างรายงานในรูปแบบของ ไฟล์ Excel ที่มีกราฟแท่งอยู่ด้วยอย่างง่ายๆนะครับ ลองมาติดตามกันดูครับ

ปัญหาที่เจอคืออะไร ?

• เวลาที่พัฒนา Web Application นั้นสิ่งที่ขาดไม่ก็คงเป็นเรื่องของรีพอร์ต คราวนี้คำถามที่ตามก็คือใช้วิธีไหนดี ใช้ Tools หรือ Library ถ้าคุณโชคดี โปรเจกท์ ที่คุณทำอยู่มี Report Tools อยู่แล้วเช่น Crytal Report อยู่ก็คงต้องแสดงความยินดีด้วยนะครับ แต่ถ้าไม่มี แล้วต้องการ report excel แล้วต้องการให้มีกราฟอยู่ด้วย ก็สามารถทำได้นะครับ แต่อาจจะต้องออกแรงกันนิดนึง แต่รับรองครับว่าไม่ยาก
เราจะสร้าง Report Excel จาก ASP.Net ได้อย่างไร ?
       • เรื่องนี้เป็นเรื่องที่ง่ายมากครับ เพียงแค่เราสร้าง page ที่มี Data อยู่ใน tag table จากนั้น ให้เรา เซ็ต
               Response.Cache.SetCacheability(HttpCacheability.NoCache);
               Response.ContentType= "application/vnd.ms-excel";
เท่านี้หน้า Webpage ของเราก็จะกลายเป็นไฟล์ excel ให้ client ได้ Open หรือ Save ได้แล้วครับ แต่มีข้อแม้อยู่นิดนึงนะครับ ว่าเครื่อง Client จะต้องลงโปรแกรม Excel ไว้ด้วยนะครับ
เราจะสร้าง กราฟ ใน Report Excel ได้อย่างไร ?
       • สำหรับการวาดกราฟนั้น ใน .NET Framework จะมี Class Library สำหรับวาดรูปไว้ให้อยู่แล้ว จะอยู่ใน Namespace System.Drawing เป็นหลัก ถ้าเราต้องการวาดกรราฟที่เป็นวงกลม ก็ลองดู System.Drawing.Graphics.DrawPie() ได้ครับ แต่ในตัวอย่างที่ผมทำไว้ จะเป็น bar graph หรือ กราฟแท่งนั่นเอง
Code Sample / ตัวอย่าง
       •  สำหรับโปรแกรมตัวอย่างผมเตรียมไว้ให้แล้ว สามารถ download ไปศึกษาดูได้นะครับ ตาม link ด้านล่างได้เลย เวลารัน อย่าลืม set permission ให้ ASP.NET / IIS_WPG write file นะครับ เพราะในตัวอย่างมีการ เขียนไฟล์รูปภาพ JPG ไว้ก่อนจากนั้นจึงค่อยนำมาใส่ใน tag table
protected void Page_Load(object sender, EventArgs e)
    {
        try
        {
            Response.Charset = "UTF-8";
            Response.Cache.SetCacheability(HttpCacheability.NoCache);
            Response.ContentType = "application/vnd.ms-excel";

            int maxDataValue = 50;
            System.Random rand = new Random();
            for (int i = 0; i < data.Length; i++)
            {
                data[i] = rand.Next(1, maxDataValue-1);
            }

            String x_lable = "ปริมาณผู้ใช้งาน";
            String y_lable = "วันที่ ";
            int img_width = 500;
            int img_height = 500;

            int max_y = 380;
            int max_x = 380;

            Bitmap myBitmap = new Bitmap(img_width, img_height);
            Graphics myGraphics = Graphics.FromImage(myBitmap);

            Rectangle graph_area = new Rectangle(2, 2, 496, 496);


            Brush[] color_brushs = new Brush[3];


            Pen blackPen = new Pen(Brushes.Black);
            Pen whitePen = new Pen(Brushes.White);



            color_brushs[0] = Brushes.DeepSkyBlue;
            color_brushs[1] = Brushes.Red;
            color_brushs[2] = Brushes.Green;



            myGraphics.FillRectangle(Brushes.White, graph_area);



            //-- Draw X-Y Axis----------//

            // Y Axis
            myGraphics.DrawLine(blackPen, new Point(60, 40),new Point(60,440));

            // X Axis
            myGraphics.DrawLine(blackPen, new Point(60, 440), new Point(440, 440));


            int start_x = 70;
            int end_y = 435;
            int bar_width = max_x / data.Length;
            for (int i = 0; i < data.Length; i++)
            {
                int bar_height = (data[i]*max_y ) /maxDataValue;
               

                myGraphics.FillRectangle( color_brushs[i % 3], 
                                         new Rectangle(start_x,
                                                        35 - bar_height,
                                                        bar_width,
                                                        bar_height
                                                        )
                                         );

                myGraphics.DrawString(data_labels[i],
                                            new Font("Tahoma",8),
                                            Brushes.Black,
                                            Convert.ToSingle(start_x),
                                            Convert.ToSingle(435 + 20)
                                      );

                start_x += bar_width;
            }

            String file_name = "output"+DateTime.Now.Ticks.ToString()+".jpg";

            String full_path_name = Request.PhysicalApplicationPath +"\\"+ file_name;
            //Response.Write(file_name+"
");

            myBitmap.Save( full_path_name, ImageFormat.Jpeg);



            blackPen.Dispose();
            whitePen.Dispose();

            myGraphics.Dispose();
            myBitmap.Dispose();

            IMG_GRAPH.Src = file_name;
        }
        catch (Exception ex)
        {
            Response.Write(ex.Message);
            Response.Write("
");
            Response.Write(ex.StackTrace);
        }
    
Download Sample Code Click Here !
ไฟล์ binariga_sample_01.zip เมื่อ unzip ออกมาแล้วจะได้ ไฟล์ทั้งหมด 3 files ให้ เริ่มต้นที่ report.html นะครับ เมื่อกด view report แล้ว ให้เลือกเป็น open ก่อนให้แสดง report ใน excel ก่อนนะครับ จากนั้นจึงค่อย save ไม่อย่างนั้นรูป jpg จะไม่ตามมาใน ไฟล์ excel ที่เราบันทึกไว้
สรุปส่งท้าย
       •  เป็นอีกทางเลือกนึงสำหรับ report ที่ง่ายๆ นะครับ สามารถลองไปประยุกต์ได้ แต่คงจะสะดวกน้อยกว่า Report Tools สำเร็จรูปนะครับ
       • หากสงสัยหรือทำแล้วติดปัญหาอะไรก็เชิญ Post ถามที่ Forum ได้เลยนะครับ เผื่อจะพอช่วยเหลื่อกันได้
Post Your Comment
Please Login
Android Developer - ติดตั้ง Android Studio ใน Windows
by  chalitbur   02 Feb 2015
 android studio  ติดตั้ง  setup 

ก่อนที่เราจะเริ่มเขียนโปรแกรมบน Android สิ่งแรกที่ต้องทำก็คือการติดตั้ง IDE ซึ่งในอดีตเราจะต้องทำการเขียนโปรแกรมผ่าน Eclipse IDE ซึ่งจะ Download มาพร้อมกับ ADT แต่ปัจจุบัน Google ได้พัฒนา IDE Tools ตัวใหม่สำหรับให้นักพัฒนาได้ Download กับไปใช้สำหรับพัฒนาโปรแกรมชื่อ Android Studio วันนี้เราลองมาเริ่มติตตั้งเพื่อเตรียมความพร้อมสำหรับการสร้างสรรค์โปรแกรมในโลกของ Android กัน

ทำความรู้จักกับ Microsoft .NET Native
by  chalitbur   21 Nov 2014
 .NET  .NET Native 

.NET Native คือเทคโนโลยีในการ precompilation สำหรับสร้างและนำ application ส่งขึ้นไปยัง Windows Store. โดยจะเป็นการคอมไพล์โค๊ดที่เขียนด้วย Managed Code ( C# ) และทำการคอมไพล์เป็น Code แบบ Native (ภาษาเครื่อง) โดยปกติแล้ว application ที่เราเขียนด้วย .NET Framework จะถูกคอมไพล์เป็น Intermediate Language ( IL ) ขณะที่โปรแกรมเริ่มทำงาน Just-In-Time (JIT) Compiler จะแปลง IL ไปเป็น Native Code.   ซึ่่ง.NET Native ตัวนี้จะแปลง Windows Store application ที่เรา ทำขึ้นไปเป็น Native Code เลยทันที นั่นหมายความว่า