none
VB2008 使用OWC元件的應用.如何設定顯示區間 RRS feed

  • 問題

  • 請教各位大大.小弟在利用OWC元件來做溫度曲線圖的輸出繪製,目前已可以呼叫出相對應的曲線圖,但在X軸設定上有些疑問想請教各位大大,
    在下面的資料中.Y軸是數字所以顯示上無太大問題.但因為X軸為時間..顯示出來就很雜亂!因為會擠在一起.
    是否能設定呈區間模式..如查詢2009/09/01~2009/09/08 以每個小時為區間畫刻度呢?
      
    AxChartSpace1.Clear()
            Dim Chart1_Series1 As OWC.ChSeries
            Dim Chart1 As OWC.ChChart = AxChartSpace1.Charts.Add
            Dim aX()
            Dim aY()
            Dim STR As String = "連線至資料庫"     
    Try
                Dim conn As SqlConnection = New SqlConnection(Str)
                Dim str1 As String = "select * from TEMP where S_DAY BETWEEN @d1 AND @d2 AND S_TANK like '%" & ComboBox2.Text & "' ORDER BY NO "
                If conn.State = ConnectionState.Closed Then
                    conn.Open()
                End If
                Dim OleDbda As New SqlDataAdapter()
                OleDbda = New SqlDataAdapter(str1, conn)
                OleDbda.SelectCommand.Parameters.AddWithValue("@d1", (DateTimePicker3.Text))
                OleDbda.SelectCommand.Parameters.AddWithValue("@d2", (DateTimePicker4.Text))
                ds = New DataSet()
                OleDbda.Fill(ds, "REPORT1")
                DR = ds.Tables("REPORT1").Rows.Count
                ds = New DataSet()
                OleDbda.Fill(ds, "REPORT1")
                DR = ds.Tables("REPORT1").Rows.Count
                ReDim aX(DR + 1)
                ReDim aY(DR + 1)
                conn.Close()
                If DR > 0 Then
                    Dim DSROW As DataRow
                    For Each DSROW In ds.Tables("REPORT1").Rows
                        Dim x As Integer = x + 1
                        y = DSROW("PV_TEMP")
                        strx = DSROW("S_DAY")
                        aX(x) = strx
                        aY(x) = y
                    Next
                End If
            Catch ex As Exception
     MessageBox.Show(ex.message, "例外發生",MessageBoxButtons.OK, MessageBoxIcon.Error)
      End Try
     Chart1_Series1 = Chart1.SeriesCollection.Add(0)
    Chart1_Series1.Type = OWC.ChartChartTypeEnum.chChartTypeLine
    Chart1_Series1.SetData(OWC.ChartDimensionsEnum.chDimSeriesNames, OWC.ChartSpecialDataSourcesEnum.chDataLiteral, ComboBox2.Text)
            Chart1_Series1.SetData(OWC.ChartDimensionsEnum.chDimCategories, OWC.ChartSpecialDataSourcesEnum.chDataLiteral, aX)
    
            Chart1_Series1.SetData(OWC.ChartDimensionsEnum.chDimValues, OWC.ChartSpecialDataSourcesEnum.chDataLiteral, aY)<br/>



    若是依照璉大所提供的網頁範例來設定:
     With Chart1
                .HasLegend = False
                 .Axes(0).MajorTickMarks = Microsoft.Office.Interop.Owc11.ChartTickMarkEnum.chTickMarkCross
                .Axes(0).MinorTickMarks = Microsoft.Office.Interop.Owc11.ChartTickMarkEnum.chTickMarkInside
                .Axes(1).MajorTickMarks = Microsoft.Office.Interop.Owc11.ChartTickMarkEnum.chTickMarkCross
                .Axes(1).NumberFormat = "dd-hh"
                .Axes(1).Scaling.Minimum = 37150     
                .Axes(1).Scaling.Maximum = 37154
                .Axes(1).MajorUnit = 0.5
                .Axes(1).MinorUnit = 1 / 24
            End With
    則Y軸顯示會變成 16-00,16-12,17-00,17-12.... X軸則為 1,2,3
    曲線的繪製就沒顯示出來了..僅有刻度的變化

    以上是小弟目前的進度..請大大指導小弟這方面的做法應用


    新手上路

    2009年9月8日 下午 02:39

解答

  • 如果你電腦有安裝 Office 2003/2007 ,加這句:
       AxChartSpace1.AllowPropertyToolbox = True

    然後在畫面上按滑鼠右鍵,指令及選項、選擇 圖表工作環境、資料工作表 頁籤,看資料是否有正確匯入。
     



     


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    • 已標示為解答 eblue 2009年9月13日 下午 04:32
    2009年9月11日 下午 12:33

所有回覆

  • 把你目前圖跟預期的示意圖貼上來吧~


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    2009年9月8日 下午 04:17
  • 不好意思.小弟的圖一直貼不上來所以直接貼上路徑
    這是我套用璉大的圖..它的X軸刻度顯示是目前小弟想要實現的..(資料來源:
    http://tlcheng.spaces.live.com/blog/cns!145419920BFD55A7!4464.trak
    )
    http://cid-6397fd182362a366.skydrive.live.com/self.aspx/%e6%96%b0%e8%b3%87%e6%96%99%e5%a4%be/test.bmp

    我一開始製作時所執行出來的圖為這個..X軸刻度名稱為每一筆資料的時間..這樣資料一多時會顯得相當雜亂
    http://cid-6397fd182362a366.skydrive.live.com/self.aspx/%e6%96%b0%e8%b3%87%e6%96%99%e5%a4%be/123.JPG

    再來我試著對顯示的刻度做設定..所得的卻是.X軸無刻度顯示.Y軸則出現很奇怪的刻度
    http://cid-6397fd182362a366.skydrive.live.com/self.aspx/%e6%96%b0%e8%b3%87%e6%96%99%e5%a4%be/456.JPG

    希望這樣的說明可以讓小弟的問題更容易讓大大了解
    2009年9月8日 下午 05:14
  • 你的圖看起來不是你所說的這個樣子:
    請教各位大大.小弟在利用OWC元件來做溫度曲線圖的輸出繪製,目前已可以呼叫出相對應的曲線圖,但在X軸設定上有些疑問想請教各位大大,
    在下面的資料中.Y軸是數字所以顯示上無太大問題.但因為X軸為時間..顯示出來就很雜亂!因為會擠在一起.

    從你這張圖來看,你的圖為類別圖,非 XY 圖,X 軸為類別標籤,Y 軸為時間座標,所以你必須先把 ChartSpace.Charts(0).Type 變更為 XY 圖,例如:chChartTypeScatterLine


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    2009年9月9日 上午 12:38
  • HI,

    看看這個程式是不是您要的效果:Office Web Components - Line Graph (Date as X-Axis)(http://www.codeproject.com/KB/graphics/OWCLine.aspx)
    2009年9月9日 上午 01:15
  • HI,

    看看這個程式是不是您要的效果:Office Web Components - Line Graph (Date as X-Axis)(http://www.codeproject.com/KB/graphics/OWCLine.aspx)

    感謝this大大提供的範例..這個範例的作者提到..他有使用到LINQ這個技巧!所以他的程式片段在我的專案中就會出現錯誤訊息
    ex:
    Dim tmp = From x In XValues Select CObj(x.ToString("yyyy-MM-dd")) 這邊的XValues就出現要我將LINQ這各提供者的命名空間匯入

    但是它的時間軸的解析度似乎只到day
    ChartAxisUnitTypeEnum.chAxisUnitDay

    不過這個範例的確相當受用!對於一些OWC元件的設定!能否請教他LINQ這邊這各該如何匯入..我看他的程式也只看到Imports Microsoft.Office.Interop.Owc11
    而沒有其它命名空間


    新手上路
    2009年9月9日 上午 02:13
  • HI,

    使用Visual Studio 2008建立的專案可以直接使用LINQ語法, 如果是用Visual Studio 2005開發程式, 可以參考這篇文件:
    Poor Man's LINQ in Visual Studio 2005(http://www.codeproject.com/KB/linq/linq2005.aspx)
    2009年9月10日 上午 03:05
  • this 大大:
    因為我的也是用2008的,不過還是一樣的錯誤訊息..用Imports來載入也找不到LINQ,是否需匯入哪依各組件呢>
    另有一問..
    我有看用VB6使用OWC元件繪製的程式
    其中這段設定:
      

      Set chConstants = ChartSpace1.Constants
       Set oss = CreateObject("OWC11.Spreadsheet")
       Set owcsheet = oss.Worksheets(1)    <------------------這邊該如何解析至VB2008
        With owcsheet
          .ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Program Files\REPORT\TEMP1.mdb" 
          .CommandText = "SELECT P_TIME, P_VAL FROM REPORT1 WHERE P_TIME BETWEEN  #" & Format(DTPicker1.Value, "yyyy/MM/dd HH:mm") & "# And #"   & Format(DTPicker2.Value, "yyyy/MM/dd HH:mm") & "#  "
      end with
     ChartSpace1.DataSource = oss
     ncount = owcsheet.UsedRange.Rows.Count


    我有試著來做!不知這樣做是否正確!因為SET指令已經不被支援了

            Dim chConstans As New Object
            chConstans = AxChartSpace1.Constants
            Dim oss As New Object
            oss = CreateObject(oss, "OWC11.Spreadsheet") AxChartSpace1.ConnectionString = "連線到資料庫" AxChartSpace1.CommandText = "SQL語法" AxChartSpace1.Clear() AxChartSpace1.Refresh() AxChartSpace1.DataSource = oss Dim ncount As Integer = owcsheet.UsedRange.Rows.Count() <-----此處小弟不知要如何來做 Dim Chart1 As ChChart = AxChartSpace1.Charts.Add
    這是目前小弟嘗試的部分..請各位大大指導
    新手上路
    2009年9月10日 上午 10:32
  • 我找到原因了..LINQ他是在 .NET3.0中.
    新手上路
    2009年9月10日 上午 10:56
  •    Set owcsheet = oss.Worksheets(1)    <------------------這邊該如何解析至VB2008
            Dim ncount As Integer = owcsheet.UsedRange.Rows.Count()  <-----此處小弟不知要如何來做
    
    Dim owcSheet As Object = oss.Worksheets(1)

    第二句哪裡有問題?
    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    2009年9月10日 上午 11:45
  • 因為我提出的2句是對應的..所以問題是相同的..

    所以宣告問題解決了!小弟做了測試
    這是接下來完成的程式 :
     

    AxChartSpace1.Clear()
            AxChartSpace1.Refresh()
            Dim chConstans As Object = AxChartSpace1.Constants
            Dim oss As Object = CreateObject("OWC11.Spreadsheet")
            Dim owcSheet As Object = oss.Worksheets(1)
            With owcSheet
                .ConnectionString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;Data Source=SONGDING\SQLEXPRESS;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=SONGDING;Use Encryption for Data=False;Tag with column collation when possible=False;Initial Catalog=PLCALM"
                .CommandText = "select PV_TEMP from TEMP where S_DAY BETWEEN #" & Format(DateTimePicker4.Value, "yyyy/M/dd HH:mm:ss") & "# AND  #" & Format(DateTimePicker3.Value, "yyyy/M/dd HH:mm:ss") & "# "
            End With
            AxChartSpace1.DataSource = oss
            Dim ncount As Integer = owcSheet.UsedRange.Rows.Count()
            Dim Chart1 As ChChart = AxChartSpace1.Charts.Add()
            With Chart1
                .Type = ChartChartTypeEnum.chChartTypeScatterLine
                .SetData(ChartDimensionsEnum.chDimXValues, ChartSpecialDataSourcesEnum.chDataBound, "a1:a" & ncount)
                .SetData(ChartDimensionsEnum.chDimYValues, ChartSpecialDataSourcesEnum.chDataBound, "b1:b" & ncount)
                With .Axes(1)
                    .NumberFormat = "dd-hh"
                    With .Scaling
                        .Minimum = CDate(DateTimePicker3.Value).ToOADate
                        .Maximum = CDate(DateTimePicker4.Value).ToOADate
                    End With
                End With
            End With
            AxChartSpace1.AllowPropertyToolbox = True
            AxChartSpace1.AllowScreenTipEvents = True
            AxChartSpace1.HasSelectionMarks = True
            AxChartSpace1.HasSelectionMarks = ChartSelectionMarksEnum.chSelectionMarksAll
    這樣輸出的圖面是OK的..但是卻沒有資料出來..請大大看一下我的連線語法與SQL指令是否正確.我是用資料庫查詢的方式下達的
    SQL版本: SQL 2008 EXPREES
    資料庫連線語法來源:我將OWC元件與資料庫連結後所複製下來的
    我抓取的是資料表TEMP 中 PV_TEMP 欄位的值!

    新手上路
    2009年9月10日 下午 12:26
  • 因為目前我不知我的連限語法是否正確所以我將查詢結果匯至一個OWCTABLE中,再將他輸出,但是還是沒有線畫出來..請教大大在這部分是否小弟有理解錯誤的地方呢?

     Dim item As Integer = OWCTABLE.Rows.Count
             For cun As Integer = 0 To item - 1
                XValues.Add(OWCTABLE.Rows(cun).Item(0))
                YValues.Add(OWCTABLE.Rows(cun).Item(1))
            Next
            Dim xObjects, yObjects As Object()
            Dim tmp = From x In XValues Select CObj(x.ToString("yyyy-MM-dd HH:mm"))
            xObjects = tmp.ToArray()
            Dim tmp2 = From y In YValues Select CObj(y)
            yObjects = tmp2.ToArray()
            'Determine maxima and minima of Y
            Dim yMax As Decimal = YValues.Max()
            Dim yMin As Decimal = YValues.Min()
            If AxChartSpace1.Charts.Count > 0 Then AxChartSpace1.Charts.Delete(0)
            Dim Chart1 As ChChart = AxChartSpace1.Charts.Add
            With Chart1
                .HasTitle = True
                .Title.Caption = "TEST"
                .Title.Font.Name = "Arial"
                .Type = ChartChartTypeEnum.chChartTypeScatterLine
                .PlotArea.Interior.SetSolid("White")
            End With
    
            Dim series As ChSeries
            series = Chart1.SeriesCollection.Add(0)
            With series
                .Name = "Series 1"
                .Caption = "Caption 1"
                .SetData(ChartDimensionsEnum.chDimCategories, ChartSpecialDataSourcesEnum.chDataLiteral, xObjects)
                .SetData(ChartDimensionsEnum.chDimYValues, ChartSpecialDataSourcesEnum.chDataLiteral, yObjects)
                .Line.Color = "red"
                .Line.Weight = LineWeightEnum.owcLineWeightThick
            End With
            With Chart1.Axes(1)
                .NumberFormat = "dd-hh"
                With .Scaling
                    .Minimum = CDate(DateTimePicker3.Value).ToOADate
                    .Maximum = CDate(DateTimePicker4.Value).ToOADate
                End With
            End With

    新手上路
    2009年9月11日 上午 11:47
  • 如果你電腦有安裝 Office 2003/2007 ,加這句:
       AxChartSpace1.AllowPropertyToolbox = True

    然後在畫面上按滑鼠右鍵,指令及選項、選擇 圖表工作環境、資料工作表 頁籤,看資料是否有正確匯入。
     



     


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    • 已標示為解答 eblue 2009年9月13日 下午 04:32
    2009年9月11日 下午 12:33
  • 這個真是幫助我很大..因為我一直無法判斷到底資料有沒讀進去..
    原本的寫法:X軸的值沒有進去
    修改了2各地方
     Dim tmp = From x In XValues Select CObj(x.ToString("yyyy-MM-dd HH:mm"))  '這邊我直接改成Dim tmp = From x In XValues Select CObj(x)

     .SetData(ChartDimensionsEnum.chDimCategories, ChartSpecialDataSourcesEnum.chDataLiteral, xObjects)
    變成
    .SetData(ChartDimensionsEnum.chDimXValues, ChartSpecialDataSourcesEnum.chDataLiteral, xObjects)

    這樣就能輸出圖形了~~
    謝謝大大您了
    新手上路
    2009年9月11日 下午 01:31
  • 可不可以請教一下eblue帥哥  小弟我最近也要用到OWC

    我跟帥哥你一樣碰到的是x軸的時間會多 並且雜亂

    請問這問題如何解決  還有你在2009年9月11日 上午 11:47的發文裡面

    有一行指令 

            For cun As Integer = 0 To item - 1
                XValues.Add(OWCTABLE.Rows(cun).Item(0))
                YValues.Add(OWCTABLE.Rows(cun).Item(1))
            Next

    請問XValues,YValues要如何定義? 小弟目前問題卡在這裡

    請各位帥哥大大幫小弟我解惑  感激不盡 

     

    2011年4月22日 上午 02:15
  • 你可以看這篇:

    http://tlcheng.twbbs.org/TLCheng/Basic/vbs/WebChart/client.htm

     

    繪圖紐按下去,沒問題的話,滑鼠右鍵看原始碼來研讀。

    IE8 以後,建議另存下來瀏覽,按下 F12 可以進 IE 的開發者模式,再逐步執行。


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2011年4月22日 下午 12:46
  • 感謝心冷熱情熄大大所提供的範例

    小弟這邊還是有些問題請教

    1."繪圖紐按下去,沒問題的話,滑鼠右鍵看原始碼來研讀 "   這段話裡的滑鼠右鍵看原始碼來研讀,指的是心冷熱情熄大大所提的範例嗎 小弟我在範例圖表上按下滑鼠右鍵後  出現的畫面是   心冷熱情熄大大 2009年9月11日 下午 12:33 所發言的內容一樣 小弟我沒看到哪裡可以點選原始碼 這邊請大大再次幫忙小弟我說明一下

    2. 範例圖表裡的流量圖表,它series.type並沒有決定選擇用哪一種 那出現的結果屬於x,y圖表嗎  還是類型圖表? 

    Chart1_Series1.Type = Microsoft.Office.Interop.Owc11.ChartChartTypeEnum.chChartTypeLine  ←  右邊這一行是小弟程式所選擇的series.type 請問小第選擇的series.type 的x軸和y軸哪一個.Axes(0)哪一個是.Axes(1)

    ------------------------------------------------

    新手上路  不善言語表達  請大家多多見諒

    2011年4月25日 上午 10:15
  • ...

    給了範例網址,當然是在該網址中按滑鼠右鍵看原始碼。

    在本篇討論按滑鼠右鍵看原始碼幹嘛?又沒有相關 OWC 的互動。

     

    2 的答案在上面網址中可以找到。


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2011年4月25日 下午 01:28
  •   maxcount = ds.Tables(s).Rows.Count
            AxChartSpace1.Clear()   '清空繪圖區
            AxChartSpace1.AllowPropertyToolbox = True
            AxChartSpace1.AllowScreenTipEvents = True
            AxChartSpace1.HasSelectionMarks = True


            Dim ChartSpace1 As AxMicrosoft.Office.Interop.Owc11.AxChartSpace = AxChartSpace1   '建立一個繪圖空間(圖表區)
            Dim Chart1 As Microsoft.Office.Interop.Owc11.ChChart = ChartSpace1.Charts.Add(0) '在ChartSpace1繪圖空間內建一個新圖表(繒圖區)
            Dim Chart1_Series1 As Microsoft.Office.Interop.Owc11.ChSeries            '宣告資料列
            Dim XValues As New List(Of String)
            Dim YValues As New List(Of Double)

            For i As Integer = 0 To maxcount - 1 Step 1
                XValues.Add(ds.Tables(s).Rows(i).Item(1))
                YValues.Add(ds.Tables(s).Rows(i).Item(3))
            Next

            Dim xObjects, yObjects As Object()
            Dim tmp = From x In XValues Select CObj(x)
            xObjects = tmp.ToArray()
            Dim tmp2 = From y In YValues Select CObj(y)
            yObjects = tmp2.ToArray()

            Chart1_Series1 = Chart1.SeriesCollection.Add(0)
            With Chart1_Series1
                '.Name = "Series 1"
                '.Caption = "Caption 1"
                .Type = ChartChartTypeEnum.chChartTypeScatterLine
                .SetData(ChartDimensionsEnum.chDimCategories, ChartSpecialDataSourcesEnum.chDataLiteral, xObjects)
                .SetData(ChartDimensionsEnum.chDimYValues, ChartSpecialDataSourcesEnum.chDataLiteral, yObjects)
                '.Line.Color = "red"
                '.Line.Weight = LineWeightEnum.owcLineWeightThick
            End With
            With Chart1.Axes(1)
                .NumberFormat = "yyyy/MM/dd HH:mm"
                With .Scaling
                    .Minimum = CDate(DateTimePicker1.Value).ToOADate
                    .Maximum = CDate(DateTimePicker2.Value).ToOADate
                End With
            End With

    以上是小弟目前的進度  小弟這次也碰到幾個問題  想請教一下:

    1.目前x,y軸已經ok了 但是曲線圖沒有出來  我有按照心冷熱情熄大大的去看資料有沒有成功匯入  結果x,y軸的資料都有成功的匯入 

    我有試過eblue大大在2009年9月11日 下午 01:31 那天發文的方法試過  資料反而沒有成功匯入 

    目前小弟問題卡在這裡 麻煩請大大再次幫忙小弟解惑

    -----------------------------------------------------------------------

    新手上路  不善言語表達  請大家多多見諒

    2011年4月27日 上午 08:59
  • 在圖上按滑鼠右鍵,叫出 指令及選項

    在一般頁籤下,切到圖表工作環境,在切到類型頁籤,看看圖形類型是否正確,順便也檢查其他選項。

     

    另外並沒有看到你指定:Chart1.Type


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2011年4月27日 下午 02:18
  • 圖表類型為x,y散佈圖  說明上寫帶有折線但沒有資料標記的XY散佈圖

    其他選項我檢查過了  應該沒有問題

    chart1.type = ChartChartTypeEnum.chChartTypeScatterLine 也已經寫入程式中  但是結果還是一樣

    以下是我目前的結果

    請大大費心在幫小弟我解決這難關  感激不盡  

    -----------------------------------------------------------------------

    新手上路  不善言語表達  請大家多多見諒

    2011年4月28日 上午 02:49
  • 感謝  心冷熱情熄大大幫小弟很多忙

    小弟目前總算做出個比較像樣的東西了  真的很感謝大大花時間教學我這蠢材!!

    以下是目前的成果圖

    -----------------------------------------------------------------------

    新手上路  不善言語表達  請大家多多見諒

    2011年4月28日 上午 07:45
  • 恭喜~~
    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2011年4月29日 下午 12:35
  • 之前小弟所畫出來的圖表只有一條線 只能表示一個種類 

    所以小弟我想能不能在同一個圖表裡  畫出2種以上的線能夠去比較差異

    小弟我嘗試用FOR迴圈去寫程式  但是好像因為是小弟我選擇類別圖表的關係(chart.type = ChartChartTypeEnum.chChartTypeScatterLine)

    所以導致圖表出現的結果如下圖:

    我有去看一下資料匯入的成功與否  基本上是成功的

    以下是我的程式碼片段 FOR迴圈繪圖部分      請大大幫幫小弟這一個忙

       For b = 0 To UBound(mdatagridviewIDname) Step 1                                         '有幾個種類就繪出幾條線
                    For i = 0 To mdatagridviewcount - 1 Step 1
                        If ds.Tables(s).Rows(i).Item(2) = mdatagridviewIDname(b) Then
                            XValues.Add(ds.Tables(s).Rows(i).Item(1))
                            YValues.Add(ds.Tables(s).Rows(i).Item(3))
                        End If
                    Next

                    Dim xObjects, yObjects As Object                           '將XValue,YValue轉置成陣列
                    Dim tmp = From x In XValues Select CObj(x)
                    xObjects = tmp.ToArray()
                    Dim tmp2 = From y In YValues Select CObj(y)
                    yObjects = tmp2.ToArray()

                    '---------------------------------------------------------------------------------------------------------------------------------'
                    Try
                        series(b) = Chart1.SeriesCollection.Add(b)
                        With series(b)
                            .Name = "Series" & b
                            .Caption = ComboBox1.Text & " ─ " & ComboBox2.Text
                            .SetData(ChartDimensionsEnum.chDimXValues, ChartSpecialDataSourcesEnum.chDataLiteral, xObjects)
                            .SetData(ChartDimensionsEnum.chDimYValues, ChartSpecialDataSourcesEnum.chDataLiteral, yObjects)
                            .Line.Color = CStr(LineColor(b))
                            .Line.Weight = LineWeightEnum.owcLineWeightThin
                         End With
                    Catch ex As Exception
                        MsgBox(ex.Message)
                    End Try
                Next

    -----------------------------------------------------------------------

    新手上路  不善言語表達  請大家多多見諒

    2011年5月6日 上午 06:42
  • 不好意思  上面發的文實在有點不經大腦思考就發了

    小弟我終於想通和找到原因了   只是我程式裡面有些寫錯的地方

     目前圖表成果已快達到需求效果   先PO上面目前的成果

    每次發完文之後  的例行公事  問問題   請大大幫小弟解惑一下

    Q1:圖表所畫出來的線(series)只能這麼粗而已嗎? 小弟我想要在加粗一點

    Q2.若剛好不幸兩條線或兩條以上的線重疊時,先畫出來的線一定會被覆蓋掉 

          在圖表上就沒辦法去點擊先畫出來的曲線  這有辦法去解決嗎?

    Q3.圖表的背景線條能不能改變,小弟我想改成虛線比較不會妨礙視覺效果

    以上是小弟我目前想知道的問題解答   請大大給予小弟一點提示和糾正  謝謝

    -----------------------------------------------------------------------

    新手上路  不善言語表達  請大家多多見諒

    2011年5月6日 下午 12:08
  • 你可以看看這篇討論:

    http://social.msdn.microsoft.com/Forums/zh-TW/236/thread/64329109-68d8-4adf-ab01-bc3b74612e8e

     

    1. 你可以用 .SeriesCollection(i).Line.Weight 來修改

    2. 沒辦法,所以你可以開啟 OWC 互動模式,透過滑鼠右鍵來選。

    3. 例如:.Axes(i).MajorGridlines.Line.DashStyle = chConst.chLineLongDash


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2011年5月6日 下午 03:22