以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  [求助]无效的数据类型  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=151674)

--  作者:绿火柴
--  发布时间:2020/6/30 16:57:00
--  [求助]无效的数据类型
为什么用临时表,图表就出不来了呢? 错误图片如下.

图片点击可在新窗口打开查看此主题相关图片如下:无效的数据类型.png
图片点击可在新窗口打开查看

图表代码如下:
问题应该是出在这两行上。
Dim Chart As WinForm.Chart \'定义一个图表变量
Dim Series As WinForm.ChartSeries \'定义一个图系变量
\'Dim tb As Table = Tables("平均汇率_table1") \'定义一个变量t引用数据表
Chart= e.Form.Controls("Chart1") \' 引用窗口中的图表
Chart.SeriesList.Clear() \'清除图表原来的图系
Series = Chart.SeriesList.Add() \'增加一个图系
Series.Length = tb.Rows.Count \'图系的数据点数等于表的行数
For p As Integer = 0 To tb.Rows.Count - 1 \'指定每个数据点的位置
    Series.X(p) = tb.Rows(p)("第一列") \'指定水平坐标
    Series.Y(p) = tb.Rows(p)("第二列") \'指定垂直坐标
Next
Chart.AxisX.DateType = True \'明确指定X轴是日期型
Chart.AxisX.AnnoFormatString = "yyyy-MM-dd" \'指定日期标示格式
\'Chart.AxisX.AnnoRotation = - 90 \'X轴标示逆时针旋转45度
Chart.VisualEffect = True \'加上这一行,让你的图表更漂亮
Series.MarkShape = MarkShapeEnum.Dot
Series.DataLabelText = "{#YVAL}"
Series.DataLabelCompass = LabelCompassEnum.North


--  作者:有点蓝
--  发布时间:2020/6/30 17:13:00
--  
这些列不是数值列:http://www.foxtable.com/webhelp/topics/0968.htm
--  作者:绿火柴
--  发布时间:2020/6/30 17:19:00
--  
我用的是窗口控件的临时表。
那日期、日汇率,这两列如何处置呢?

--  作者:绿火柴
--  发布时间:2020/6/30 17:50:00
--  
像 X 轴,我都已经明确指定为 日期 列了。
且在窗口加载时也设置了
    If dc.name = "第一列" Then
        dc.DataCol.Caption = "日期"
        dc.DataCol.SetDateTimeFormat(DateTimeFormatEnum.Date)

--  作者:绿火柴
--  发布时间:2020/6/30 18:05:00
--  
主菜单中,点击 汇率查询,会弹出有问题的窗体的。
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:汇率管理.rar


--  作者:有点蓝
--  发布时间:2020/6/30 20:26:00
--  
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:汇率管理.zip


--  作者:绿火柴
--  发布时间:2020/7/1 9:43:00
--  
多谢蓝版,接着问,这一条查询代码,能再优化吗?
现在是,每取一次都要从后台查找一次。我觉得应该依据起止日期取出这个日期段的集合,然后再在这个集合中查询取值。
不晓得代码,怎么写合适,请蓝版本帮忙下,修改下代码。
集合的代码我会写的,如下:
Dim dtk As DataTable =  DataTables("汇率库")
dtk.Select("日期 >= #" & dp1.Value & "# and 日期 <= #" & dp2.Value & "#")

下面这段再怎么优化下,请帮忙!!!
\'填充查找期间的日期值,并查找对应汇率,未找到的则等于上一行的汇率值-----------------↓
For k As Integer = 0 To t.TotalDays
    Dim dr As DataRow = tb.DataTable.DataRows(k)
    If k = 0 Then
        dr("日期") = dp1.Value
    Else
        dr("日期") = dp1.Value.AddDays(k)
    End If
    Dim drk As DataRow = dtk.SQLFind("日期 = #" & dr("日期") & "#")  \'查找后台汇率值
    If drk IsNot Nothing Then
        dr("日汇率") = drk(cb1.Value)
    Else
        If k > 0 Then
            Dim pr As DataRow = tb.DataTable.DataRows(k-1) \'取上一行汇率值
            If pr("日汇率") > 0 Then
                dr("日汇率") = pr("日汇率")
            End If
        End If
    End If
Next

--  作者:有点蓝
--  发布时间:2020/7/1 10:00:00
--  
Dim dtk As DataTable =  DataTables("汇率库")
Dim drs As List(Of DataRow) = dtk.SQLSelect("日期 >= #" & dp1.Value & "# and 日期 <= #" & dp2.Value & "#",,“日期”)
for each nr as datarow in drs
Dim dr As DataRow = tb.DataTable.addnew
dr("日期") = cr("日期")
dr("日汇率") = cr("日汇率")
next

--  作者:绿火柴
--  发布时间:2020/7/1 10:21:00
--  
这里的cr 是那来来的。

是上面的 nr  

多谢了,我自己再调试下。
[此贴子已经被作者于2020/7/1 10:25:50编辑过]

--  作者:有点蓝
--  发布时间:2020/7/1 10:36:00
--  
是nr,手误