none
Chart on Framework 4.0 RRS feed

  • คำถาม

  • คือผมจะเขียน Chart ที่เป็น Coss table ซึ่งก็ใช้ code ตามด้านล่าง แต่ว่าข้อมูลใน Table ที่ผมมี อาจจะไม่เหมือนกับตัวอย่างคือ มีแค่
    NameYearSalesCommissions
    John200255676.552699.33
    Mary2002443332299
    Andrew200264455.43636
    John2003498842355
    Mary2003529942487
     


    John2004629943593




    Andrew2004789934852

    อะไรประมาณนี้ พอสั่งรันปั๊บ Chart ก็ออกมามั่วๆตำแหน่ง ยังไงรบกวนแนะนำด้วยครับ


    using System.Web.UI.DataVisualization.Charting;
    using System.Data;
    using System.Data.OleDb;
    ...
    
    private void Page_Load(object sender, System.EventArgs e)
    {
        // Resolve the address to the Access database
        string fileNameString = this.MapPath(".");
        fileNameString += "..\\..\\..\\data\\chartdata.mdb";
    
        // Initialize a connection string    
        string myConnectionString = "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=" + fileNameString;
        
        // Define the database query    
        string mySelectQuery="SELECT * FROM REPSALES;";
    
        // Create a database connection object using the connection string    
        OleDbConnection myConnection = new OleDbConnection(myConnectionString);
        
        // Create a database command on the connection using query    
        OleDbCommand myCommand = new OleDbCommand(mySelectQuery, myConnection);
        
        // Open the connection    
        myCommand.Connection.Open();
        
        // Create a database reader    
        OleDbDataReader myReader = myCommand.ExecuteReader(CommandBehavior.CloseConnection);
        
        // Data bind chart to a table where all rows are grouped in series by the "Name" column
        Chart1.DataBindCrossTable(
            myReader, 
            "Name", 
            "Year", 
            "Sales", 
            "Label=Commissions{C}");
    
        // Close the reader and the connection
        myReader.Close();
        myConnection.Close();
    
    }
    ...
    

    n.jakkrid
    29 พฤศจิกายน 2554 4:46

คำตอบ

  • ลองใช้โค้ดนี้ดูค่ะ

     

    protected void Page_Load(object sender, EventArgs e)

        {

            System.Data.DataView dv= SqlDataSource1.Select(DataSourceSelectArguments.Empty)as  System.Data.DataView;

            Chart1.DataBindCrossTable(dv, "Name", "Year", "Sales", "Label=Commissions{C}");

            foreach (Series series in Chart1.Series)

            {

                series.ChartType = SeriesChartType.Line;

            }

        }

     

     

    http://msdn.microsoft.com/en-us/library/dd456696.aspx


    Supa Sethasiripong [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • ทำเครื่องหมายเป็นคำตอบโดย supa_sModerator 30 พฤศจิกายน 2554 11:59
    29 พฤศจิกายน 2554 10:05
    ผู้ดูแล
  • โค้ดที่ให้ไปล่าสุดนี้ไม่จำเป็นต้องใช้ code behind ค่ะ

    แค่ bind datatable แล้ว Chart ก็จะแสดงใน load event page

    ถ้ายังมีคำถามสงสัยตรงไหน สามารถส่งโค้ดมาให้ตรวจสอบได้นะคะ จะได้ช่วยกัน


    Supa Sethasiripong [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • ทำเครื่องหมายเป็นคำตอบโดย n.jakkrid 26 มีนาคม 2555 3:59
    5 ธันวาคม 2554 6:02
    ผู้ดูแล

ตอบทั้งหมด

  • ลองใช้โค้ดนี้ดูค่ะ

     

    protected void Page_Load(object sender, EventArgs e)

        {

            System.Data.DataView dv= SqlDataSource1.Select(DataSourceSelectArguments.Empty)as  System.Data.DataView;

            Chart1.DataBindCrossTable(dv, "Name", "Year", "Sales", "Label=Commissions{C}");

            foreach (Series series in Chart1.Series)

            {

                series.ChartType = SeriesChartType.Line;

            }

        }

     

     

    http://msdn.microsoft.com/en-us/library/dd456696.aspx


    Supa Sethasiripong [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • ทำเครื่องหมายเป็นคำตอบโดย supa_sModerator 30 พฤศจิกายน 2554 11:59
    29 พฤศจิกายน 2554 10:05
    ผู้ดูแล
  • ถ้าผมไม่ใช้ SqlDataSource ได้หรือเปล่าครับ

    คือผมมี load data ตั้วนั้นมาเก็บไว้ที่ Datatable ก่อนหน้านี้แล้ว 

    อยากจะ reuse ใช้ Datatable ตัวนั้นได้หรือเปล่าครับ

    พอจะมีวิธีไหมฮ่ะ


    n.jakkrid
    30 พฤศจิกายน 2554 1:39
  • ใช้ได้หมดเลยทั้ง datatable sqldatareader หรือ dataview เพราะทั้งหมดเป็น parameter 

    แค่ว่าตอนที่ลองโค้ด ใช้ sqldatasource ค่ะ 


    Supa Sethasiripong [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    30 พฤศจิกายน 2554 3:04
    ผู้ดูแล
  •  

    เหมือนจะไม่ได้นะครับ 

     Chart1.DataBindCrossTable(myDataTable, "Name", "Year", "Sales", "Label=Commissions{C}");

    มันฟ้องว่า invalid arguments


    n.jakkrid
    30 พฤศจิกายน 2554 6:12
  • ต้อง convert DataTable เป็น DataView ก่อน

    DataView dv=new DataView(myDataTable);
    Chart1.DataBindCrossTable(dv,"Name","Year","Sales,"Label="Commisssions{C}");

    Supa Sethasiripong [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    30 พฤศจิกายน 2554 6:45
    ผู้ดูแล
  • Chart ยังคงออกมาไม่ถูกต้องครับ รบกวนลองตรวจสอบครับ 

     


    n.jakkrid
    30 พฤศจิกายน 2554 7:19
  • Chart ล่าสุดที่ให้มานี้ ข้อมูลไม่เหมือนกับของเมื่อวาน

    สรุปคืออยากให้ข้อมูลออกมาแบบไหนคะ


    Supa Sethasiripong [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    30 พฤศจิกายน 2554 7:34
    ผู้ดูแล
  • อยากให้ออกมาตามข้อมูลชุดล่าสุดนะครับผม 
    n.jakkrid
    30 พฤศจิกายน 2554 7:36
  • ศึกษาข้อมูลในเวปนี้ก่อนค่ะ
    มีตัวอย่างโค้ดและ tool ต่างๆ สำหรับสร้าง Chart

    New ASP.NET Charting Control


    Supa Sethasiripong [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    30 พฤศจิกายน 2554 8:03
    ผู้ดูแล
  • เว็บนี้ก็ลองศึกษาดูแล้วและก็พยามหาวิธีทำแล้วนะฮ่ะแต่ก็ยังไม่ได้ เลยมาลอง post ถามดูนะครับผม เพราะถ้าคุณดูตามรูปที่ผมส่งให้ดูล่าสุด Chart ที่ได้เนี่ย ข้อมูลมันจะเรียงลำดับไม่ตรงกับข้อมูลใน DataTable ครับ

    เช่นกราฟแท่งที่มีข้อมูล QTY อยู่ 1,432 มันดันถูกวางอยู่ใน Private Network area ซึ่งจริงๆมันควรอยู่ใน Internet Access area


    n.jakkrid
    • แก้ไขโดย n.jakkrid 30 พฤศจิกายน 2554 8:42
    30 พฤศจิกายน 2554 8:38
  • ขอโค้ดด้วยได้ไหมคะ

    จะได้ช่วยกันดู


    Supa Sethasiripong [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    30 พฤศจิกายน 2554 8:59
    ผู้ดูแล
  • เดี๋ยวพรุ่งนี้จัดให้ครับผม เดี๋ยวแต่งๆก่อนนิดนุง ^^
    n.jakkrid
    30 พฤศจิกายน 2554 10:36
  • Code น่าจะประมาณนี้

     

    <asp:Chart ID="Chart1" runat="server" DataSourceID="SqlDataSource1"

                Height="600px" Width="1000px">

                <Series>

                    <asp:Series Name="EOS" LegendText="#SERIESNAME" XValueMember="ApplicationType"

                        YValueMembers="QTY" Legend="Legend1"

                        ChartArea="ChartArea1" Label="#VAL{D}">

                    </asp:Series>

                    <asp:Series ChartArea="ChartArea1" LegendText="Fiber Optic" Name="Fiber Optic"

                        XValueMember="ApplicationType" YValueMembers="QTY" Legend="Legend1"

                        Label="#VAL{D}">

                    </asp:Series>

                    <asp:Series ChartArea="ChartArea1" LegendText="Fiber Optic(BTS)"

                        Name="Fiber Optic(BTS)" XValueMember="ApplicationType" YValueMembers="QTY"

                        Legend="Legend1" Label="#VAL{D}">

                    </asp:Series>

                    <asp:Series ChartArea="ChartArea1" LegendText="Metro Ethernet"

                        Name="Metro Ethernet" XValueMember="ApplicationType" YValueMembers="QTY"

                        Legend="Legend1" Label="#VAL{D}">

                    </asp:Series>

                </Series>

                <ChartAreas>

                    <asp:ChartArea Name="ChartArea1">

                        <AxisX Title="ApplicationType">

                            <MajorGrid Interval="2" />

                            <LabelStyle Interval="1" />

                        </AxisX>

                        <AxisY Title="QTY">

                            <LabelStyle Interval="200" />

                        </AxisY>

                    </asp:ChartArea>

                </ChartAreas>

                <Legends>

                    <asp:Legend Name="Legend1" Docking="Bottom" ItemColumnSpacing="30"

                        LegendStyle="Row" MaximumAutoSize="100" TitleAlignment="Near">

                        <Position Height="4.00667763" Width="40" X="60" Y="92.9933243" />

                    </asp:Legend>

          


    Supa Sethasiripong [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    5 ธันวาคม 2554 4:08
    ผู้ดูแล
  • แล้้วถ้าเป็นเขียนฝั่ง C# code ละคับผม ^^
    n.jakkrid
    5 ธันวาคม 2554 4:47
  • โค้ดที่ให้ไปล่าสุดนี้ไม่จำเป็นต้องใช้ code behind ค่ะ

    แค่ bind datatable แล้ว Chart ก็จะแสดงใน load event page

    ถ้ายังมีคำถามสงสัยตรงไหน สามารถส่งโค้ดมาให้ตรวจสอบได้นะคะ จะได้ช่วยกัน


    Supa Sethasiripong [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • ทำเครื่องหมายเป็นคำตอบโดย n.jakkrid 26 มีนาคม 2555 3:59
    5 ธันวาคม 2554 6:02
    ผู้ดูแล