FOXTABLE编程
菜鸟学习Foxtable开发
谨以此拙作谨献以给此书献给
正在学习Foxtable(狐表)的
正在迷茫着、困惑着的
又没有时间系统学习初学者们!
特别申明
本教程借鉴了大量优秀案例研究成果
在此一并致谢!
关于狐表开发
开发顺序 设计方法
开发顺序 设计方法 表相关
窗口相关 菜单相关 权限相关
开发顺序1.参考同类软件
设计顺序1.创建必要的数据表
设计顺序2.设置表与表之间的关联
设计顺序3.设计表的属性与列的属性
设计顺序4.设置必要的用户和权限
设计顺序5.创建必要的窗口
设计顺序6.创建必要的菜单
设计顺序7.为窗口控件增加事件
设计顺序8.为菜单增加事件
设计顺序9.增加必要的报表和图表
设计顺序10.设置高级权限
• Oቤተ መጻሕፍቲ ባይዱfice办公系列
基础软件
• Freemind,记录开发过程
• QBE,sql语言生成
辅助应用 • Spx,截图
其他
• irfanview • 属性查看器.table • Notepad++
建议与鼓励
1,帮助文件,不管懂不懂,先浏览一遍! 2,帮助文件,不管会不会,跟着操作一遍! 3,帮助文件再看一遍! 4,尝试做些小功能!
学习的过程从来都不是轻松的, 请一定坚持!祝大家成功!
以上有不当之处,请大家给与批评指正, 谢谢大家!
26
开发实例讲解
功能剖析 软件构思
开发顺序 设计方法 表相关 窗口相关 菜单相关 权限相关
类似软件剖析
软件功能剖析
软件菜单剖析 菜单区
您自己需要什么样的管理软件呢?
Foxtable(狐表)使用指南设计
狐表使用指南关于菜单绝大多数的日常操作都是通过菜单来完成的,所以我们首先介绍一下Foxtable的菜单。
一、菜单的构成Foxtable的菜单和传统的菜单有所不同,它是由功能区组成的。
系统菜单默认包括日常工作、数据表、管理项目、打印输出、杂项等五个功能区;而每一个功能区又是由功能组构成的,例如日常工作这个功能区,包含剪贴板、数据、排序与筛选、数据统计、编辑、窗口等功能组;通过功能区和功能组,我们可以将各种按钮按照功能分类,有序地组合起来。
除了功能区外,菜单还包括程序菜单,快速访问栏和配置栏,如下图所示:单击"文件"按钮会出现程序菜单,程序菜单包括与文件和打印相关的命令:配置栏位于窗口的右上角:初次使用,您可能会对这种风格的菜单布局感到不适应,其实这种风格是一种趋势,越来越多的软件会采用;相信你习惯之后,肯定会感到这样的布局其实是非常方便的;例如当你完成一个管理项目的设计工作后,之后录入数据、查询、筛选、统计、打印报表等几乎所有的日常工作,都可以在菜单的日常工作区完成,无需像传统的菜单那样,需要反复选择不同的菜单。
二、按钮的类型按钮分为三种类型:1、标准按钮绝大部分按钮都是标准按钮,单击标准按钮即可执行某一项操作,例如复制、剪切、粘贴等按钮。
2、下拉按钮单击下拉按钮将出现一个下拉菜单,用以选择具体的操作,例如功能组“排序与筛选”中的“表视图”按钮。
3、组合按钮组合按钮其实就是标准按钮和下拉按钮的组合,组合按钮分成两部分,单击上半部分会立即执行某项操作,而单击下半部分,将出现一个下拉菜单,用以选择更多的类似操作。
例如“数据”功能组中的“增加行”按钮,就是一个组合按钮,单击按钮的上半部分,将直接增加一行,而单击按钮的下半部分,将出现一个下拉菜单,用以选择是增加一行还是增加多行,如下图所示:之所以专门介绍一下按钮的种类,是因为不少用户会忽略组合按钮所包含的下拉菜单,而这些下拉菜单中有不少功能是相当重要的。
Foxtable示例
Foxtable示例DataTables(表)常用属性通过DataTables集合,可以获得指定名称的DataTable(表)。
例如: Dim dtAs DataTabledt = DataTables("订单")如果要禁止编辑某个DataTable,只需将其AllowEdit属性设为False,例如: DataTables("订单").AllowEdit = False注:在命令窗口执行上述代码,你会发现订单表的左上角出现一个锁形标记,表示此表已经被锁定,不能在其中输入数据。
如果你要取消锁定表,只需将其AllowEdit属性重新设为True: DataTables("订单").AllowEdit = True下表列出了DataTable的常用设置属性,它们的用法和AllowEdit属性完全一样:属性名说明AllowEdit 是否允许修改表中数据AllowAddNew 是否允许增加行AllowClipBoa是否允许复制粘贴数据 rdAllowInitial是否允许初始化此表 ize是否允许自动增加行,也就是在最后一行的最后一个单元格按回车键时,是否自AutoAddNew 动增加一行AllowDelete 是否允许删除行AllowLockRow 是否允许锁定行AllowUnlockR是否允许取消锁定行 ow我们在编辑数据的时候,如果按回车键或Tab键,光标会向右移到下一单元格,通过下面的属性,你可以改变这种默认的光标移动方式:属性名说明EnterKeyActionDown 按回车键是否向下移到另一单元格 TabKeyActionDown按Tab键是否向下移到另一单元格例如:你希望按回车键向下移动光标,而不是向右移动,只需将EnterKeyActionDown属性设为True即可:DataTables("订单").EnterKeyActionDown = True最后三个常用的属性为:属性名说明Name 返回DataTable的名称返回一个整数,表示DataTable的类型:1 内部数据表2 内部查询表 Type3 外部数据表4 外部查询表5 临时表HasChanges 逻辑型,判断DataTable的数据是否已经被修改例如执行下面的代码,将列出所有已经修改过的DataTable: Output.Show("已经修改的数据表:") For Each dt As DataTable In DataTables1If dt.Type = 1 Orelse dt.Type = 3 ThenIf dt.HasChanges ThenOutput.Show()End IfEnd IfNext常用方法1、AddNew:在DataTable中增加一行或多行,并返回所增加的第一行。
[原创]菜鸟也能用foxtable开发自己的应用程序,图文视频教程[连载结束,整理至1楼]
[原创]菜鸟也能用foxtable开发自己的应用程序,图文视频教程[连载结束,整理至1楼][原创]菜鸟也能用f o xt able开发自己的应用程序,图文视频教程[连载结束,整理至1楼] Post By:2013-1-2111:04:00 [只看该作者]学习Foxtable已经有1年多了,都已经忘记曾经是怎么开始的,也已经忘记到底是什么让我坚持了下来,不管怎样,能坚持一年多,已足以证明Foxtable这个工具有着强大的吸引力和诱惑力,对于一个出身文科的我来说,需要在短时间内看到成效,这个工具确实是不二之选。
回想一年前,把那个“自动输入省市列表”的案例奉为经典!把那个“自动关联”的功能奉为传奇!为那个“自动统计”功能啧啧称奇!而如今,我自己已经可以独立完成这些基本的功能,甚至用代码实现,甚至已经很久没有再碰过Excel了,而在这个之前我每天都要反复打开Excel数几十次!不知道什么原因,自从接触Foxtable开始,运动都少了很多,坐在电脑前的时间比往常多了几倍,真是有点不可思议!看到Foxtable一步步的成长,功能一点点的完善,我很钦佩作者的坚持,感谢作者的付出,怎奈,软件的入门确实还是有点小难度,实现基本的,似乎很简单,但是一涉及到复杂一点的,没有学过编程的人,就没有了头绪,正是由于这个情况,也表示我对Foxtable的感谢,对作者的支持,我希望以自己的绵薄之力,为Foxtable的入门学习,增加一点点浅显的学习内容,让Foxtable更加容易学习,让Foxtable被更多人了解,让Foxtable被更多人采用。
于是,花了1个月的业余时间,设计了一个半成品,“会员管理系统”,作为学习的案例文件,做一个循序渐进的开发实例,在春节前为大家奉献出来,希望大家多多捧场。
本文共分九个章节进行讲述,主要是图文辅以视频的方式进行,经过2个多月的整理,现已整理完毕,特意给大家分享。
第一章,创建会员表同时为会员表设置其必要的事件1,项目介绍,1楼2,开场PPT 2,3楼3,软件介绍及下载,4,5,6楼4,第一章节所需要的文件及讲解提纲下载 7楼5,系统设置的预见性——增加时候的事件 13楼6,系统设置的预见性——修改编辑事件 14楼7,系统设置的预见性——保存事件 22楼8,其他事项——表达式 23楼9,其他事项——项目列表 24楼10,其他事项——特殊字段 24楼11,第一章总结 85楼第二章,创建会员充值表并设置必要的事件1,第二章介绍: 88楼2,第一部分:创建会员充值表,并设置表属性 89楼3,快速建立会员充值表,同时设置“系统设置的预见性——增加时候的事件” 90楼4,设置“系统设置的预见性——修改编辑事件” 90楼5,设置“系统设置的预见性——保存事件” 91楼6,设置会员充值表的其他属性 92楼7,第二章第一部分案例文件下载 93楼8,快速建立会员消费表,同时设置“系统设置的预见性——增加时候的事件” 103楼9,设置与表相关的事件(关联,关联数据引用等) 107楼,108楼,109楼,110楼10,设置“系统设置的预见性——修改、编辑”事件 111楼11,设置会员消费表的其他属性 112楼12,第二章第二部分案例文件下载 112楼13,第三部分:创建消费表,消费明细表、产品表并设置表属性 129楼14,设置“系统设置的预见性——增加时候的事件” 130楼15,设置其他属性事件 131楼16,第三部分案例下载 131楼第三章,设置各表之间的关联及表间关系1,分析各表之间的关系,设置各表的关联 147楼2,第三章需要的案例文件下载 147楼第四章,设置简单的导航菜单及窗口1,设置简单的导航菜单及窗口 172楼2,第四章需要的案例文件下载 172楼第五章,完善各表的事件以及设置简单的查询表1,第五章第一部分:完善会员表的相关事件 178,179楼2,第五章第二部分:完善会员充值表相关事件 204楼3,第五章第三部分:设置简单的查询表 205楼4,第五章第四部分:使用辅助sql工具205楼第六章[设置必要的用户及权限]1,第六章第一部分:移植优秀的用户管理模块视频过程以及案例文件下载 242楼2,第六章第二部分:用户权限模块移植视频过程及案例文件下载 258楼第七章[纯表格系统的完善和发布]1,纯表格系统的完善和发布(视频过程) 269楼第八章,设计我们的第一个窗口1,从第一个窗口开始对系统进行改头换面视频过程 319楼第九章,系统的纠错及完善1,第九章第一部分:[窗口的分类及开发顺序] 更新至342楼2,第九章第二部分:[操作类窗口——会员登记窗口设计] 更新至353楼3,第九章第三部分:[操作类窗口——会员消费窗口设计] 更新至370楼菜鸟也能用foxtable开发自己的应用程序之菜鸟学习foxtable感受(PPT)下载菜鸟也能用foxtable开发自己的应用程序整理篇(word版本)下载案例分期文件下载链接:数据库文件:已经发布的视频链接已经发布的PPT文件下载已经发布的其他辅助文件(mmap)下载:。
foxtable程序
Dim Chart As WinForm.Chart'定义一个图表变量Dim Series As WinForm.ChartSeries'定义一个图系变量Chart= e.Form.Controls("Chart1") ' 引用窗口中的图表Chart.DataSource = "表A"'设置绑定表Chart.SeriesList.Clear() '清除图表原来的图系Series = Chart.SeriesList.Add() '增加一个图系Series.X.DataField = "第一列"'X轴绑定到月份列Series.Y.DataField = "一百米"'Y轴绑定到数量列Series.Y.DataField = e.Form.Controls("ComboBox2").TextChart.VisualEffect = True'加上这一行,让你的图表更漂亮Chart.ChartType = ChartTypeEnum.Bar'图表1类型该为Bar(条形) Chart.AxisX.AnnoRotation = - 45'X轴标示逆时针旋转45度Dim Chart As WinForm.Chart '定义一个图表变量Dim Series As WinForm.ChartSeries '定义一个图系变量Chart = e.Form.Controls("Chart1") ' 引用窗口中的图表Chart.VisualEffect = True'加上这一行,让你的图表更漂亮Chart.ChartType = ChartTypeEnum.Bar '图表1类型该为Bar(条形) Chart.ChartType2 = ChartTypeEnum.XYPlot '图表2类型该为线形Chart.DataSource = "统计表1"'设置绑定表Chart.SeriesList.Clear() '清除图表原来的图系Series = Chart.SeriesList.Add() '给图表1增加一个图系Series.Text = "数量"Series.X.DataField = "产品"'X轴绑定到产品列Series.Y.DataField = "数量"'Y轴绑定到数量列Chart.SeriesList2.Clear() '清除图表原来的图系Series = Chart.SeriesList2.Add() '给图表2增加一个图系Series.Text = "金额"Series.X.DataField = "产品"'X轴绑定到产品列Series.Y.DataField = "金额"'Y轴绑定到数量列Chart.LegendVisible = True'显示图列Chart.LegendCompass= CompassEnum.South '图列显示在南方(底端) Chart.AxisY.Text = "数量"Chart.AxisY2.Text = "金额"。
狐表开发实例
狐表开发实例一、概述狐表是一种用于开发和管理数据表格的工具,它可以帮助用户轻松创建、编辑和分享表格数据。
本文将深入探讨狐表的开发实例,介绍如何使用狐表进行表格开发,并详细介绍其功能和优势。
二、狐表的基本功能狐表作为一个强大的数据表格工具,具有以下基本功能:2.1 创建表格通过狐表,用户可以方便地创建新表格。
只需按照指定的格式输入表格的列名和数据内容,就可以在狐表中创建一个新的表格。
2.2 编辑表格狐表提供了丰富的编辑功能,用户可以对表格的内容进行添加、修改和删除操作。
通过简单的拖拽和复制粘贴等操作,用户可以轻松地编辑表格的数据。
2.3 格式设置狐表支持对表格的格式进行设置。
用户可以设置不同列的数据类型、样式和排序规则,从而满足不同的数据处理需求。
2.4 数据分析狐表内置了一系列数据分析函数,用户可以通过这些函数对表格中的数据进行统计和分析。
用户只需输入相应的函数公式,就可以得到统计结果。
2.5 数据导入导出狐表支持将表格中的数据导出为常见的文件格式,比如CSV、Excel等。
同时,用户也可以通过导入功能将外部数据导入到狐表中进行进一步的处理和分析。
三、狐表的优势狐表作为一款开发数据表格的工具,具有以下优势:3.1 方便易用狐表提供了简洁、直观的界面,用户可以轻松上手使用。
无需编写复杂的代码,用户只需使用简单的操作即可完成表格的开发和编辑。
3.2 多人协作狐表支持多人同时对同一表格进行编辑和修改,实现了多人协作的需求。
用户可以通过共享链接或邀请其他用户加入,让团队成员共同参与表格的开发和管理。
3.3 安全可靠狐表提供了数据的自动保存和备份功能,确保用户数据的安全。
同时,狐表还支持设置用户权限,可以对表格进行访问和编辑权限的控制。
3.4 丰富的功能扩展狐表提供了丰富的功能扩展,用户可以根据自己的需求进行个性化定制。
用户可以通过插件市场获取各种功能插件,从而进一步提升狐表的功能和性能。
四、使用狐表进行表格开发的实例为了更好地理解狐表的开发过程,下面将介绍一个实际的表格开发实例。
Foxtable示例
Foxtable示例DataTables(表)常用属性通过DataTables集合,可以获得指定名称的DataTable(表)。
例如: Dim dtAs DataTabledt = DataTables("订单")如果要禁止编辑某个DataTable,只需将其AllowEdit属性设为False,例如: DataTables("订单").AllowEdit = False注:在命令窗口执行上述代码,你会发现订单表的左上角出现一个锁形标记,表示此表已经被锁定,不能在其中输入数据。
如果你要取消锁定表,只需将其AllowEdit属性重新设为True: DataTables("订单").AllowEdit = True下表列出了DataTable的常用设置属性,它们的用法和AllowEdit属性完全一样:属性名说明AllowEdit 是否允许修改表中数据AllowAddNew 是否允许增加行AllowClipBoa是否允许复制粘贴数据 rdAllowInitial是否允许初始化此表 ize是否允许自动增加行,也就是在最后一行的最后一个单元格按回车键时,是否自AutoAddNew 动增加一行AllowDelete 是否允许删除行AllowLockRow 是否允许锁定行AllowUnlockR是否允许取消锁定行 ow我们在编辑数据的时候,如果按回车键或Tab键,光标会向右移到下一单元格,通过下面的属性,你可以改变这种默认的光标移动方式:属性名说明EnterKeyActionDown 按回车键是否向下移到另一单元格 TabKeyActionDown按Tab键是否向下移到另一单元格例如:你希望按回车键向下移动光标,而不是向右移动,只需将EnterKeyActionDown属性设为True即可:DataTables("订单").EnterKeyActionDown = True最后三个常用的属性为:属性名说明Name 返回DataTable的名称返回一个整数,表示DataTable的类型:1 内部数据表2 内部查询表 Type3 外部数据表4 外部查询表5 临时表HasChanges 逻辑型,判断DataTable的数据是否已经被修改例如执行下面的代码,将列出所有已经修改过的DataTable: Output.Show("已经修改的数据表:") For Each dt As DataTable In DataTables1If dt.Type = 1 Orelse dt.Type = 3 ThenIf dt.HasChanges ThenOutput.Show()End IfEnd IfNext常用方法1、AddNew:在DataTable中增加一行或多行,并返回所增加的第一行。
foxtable学习
1、若保存,则无法还原删除的行。
(见其他中的回收站)2、锁定是不让其修改冻结是位置不变。
3、只有在同步后,所看到的是最新数据。
4、加载可以应对库中数据庞大,只取部分的情况5、本表的搜索、设定都比excel强大6、切换是在执行某些不改变数值程序等的情况下回到原界面的功能(即窗口间的切换)7、表示图可以在删选后保存其表格数据,方便其以后的保存及使用(表格改动后灰跟随着改变)8、显示冗余值:把重复的显示出来,可删除,之后切换,剩下的都不重复。
9、一个汉字占两个字符,故在表格设定时,要注意其长度10、加载树是指窗口所要看到的行列,而筛选树是类似于搜索引擎的功能。
→加载:从数据库中取数据筛选:在表A的数据上提取,不经过数据库。
11、注意本季度(不累计)与截止本季度(累计)的区别。
12、快速清零是将零隐藏(只对一列纯数有效)13、零时表会在重新加载后消失(永远是空表)。
其列都是红色即被更改的意思。
14、查询表中可以敲击代码eg-where 产品=’PD01’此代码仅看,有此功能,而查询表是在原表中查询某些条件并做成新表可同eg- select *from {某表}where 某项目= ‘某项’(注:只能由大级到小级,而不是同级)或Eg- select * from {某表}where 某项目= ‘某项’and 某项目= ‘某项’(可并列)15、表名是使用时的代称(大名),而标题是显示的代称(小名)16、复制表只适用于数据表,而不是查询表,可通过导入/导出解决。
且复制表也带查询分类功能[某项目] = ‘某项’→其中and不可用,如此,即复制两次,达到相同效果17、自定义样式(对于整张表而言),可自己设定,使用样式可在表属性中设定-事件-绘制-drawcell中。
注:对于这种标注,还可以通过编写代码来将所需要的标注某样式If roro(“单价”)>25 thene.style = “样式1”end if.18、表属性是对表操作的权限,以及对表做了什么19、多重表头标题中得到_1得到_2 (一样的就合并了)(可连续多用,即连续叠加)20、列属性/列表项目/自定义项目等可以做下拉菜单,包括数据表取值。
菜鸟学习Foxtable开发
逻辑型
用于存储布尔值, 即真或假。
数值型
用于存储数字数据, 包括整数、浮点数 等。
日期型
用于存储日期和时 间数据。
空值型
用于表示缺失或未 定义的数据。
变量和常量
变量
用于存储数据的容器,可以随时修改其 值。
VS
常量
用于存储固定值,一旦定义后不能修改。
控制流语句
01
02
03
条件语句
根据条件执行不同的代码 块。
02
使用`ft.DataFrame.fillna()`函数填充缺失值 。
03
使用`ft.DataFrame.astype()`函数将数据转 换为指定类型。
04
使用`ft.DataFrame.replace()`函数替换特定 值。
数据分析
使用 `ft.DataFrame.describe( )`函数获取数据的描述性 统计信息。
处理策略
根据实际情况选择合适的处理策略,如填充缺失值、删除含有缺失 值的行或列、使用插值方法等。
使用Foxtable函数
Foxtable提供了多种函数来处理缺失值,如`fillna()`、`dropna()` 等。
如何处理异常值?
识别异常值
01
通过可视化数据、使用统计方法或基于业务逻辑判断
来识别异常值。
报表生成
Foxtable可以用于生成各种报表,如 销售报表、财务报告等,方便用户进 行数据可视化展示。
数据处理
Foxtable支持对表格数据进行各种处 理操作,如数据清洗、转换等,方便 用户进行数据处理。
02
Foxtpip
访问Python官网下载并安装Python 解释器,建议选择最新稳定版本。
Foxtable常用代码汇总
Next 按钮或菜单 列出订单表中所有列的名称 12 DataCol 增加临时列,并可给临时列设置表达式 GetType (Double ), "[ 数量] * [ 单价] * (1 - [ 折扣 ])") 目文件后,将不复存在订 单 ").DataCols.Add ("金 额 ", 按钮或菜单 通过代码增加的临时列,在重新打开项13 DataCol 删除临时列 If DataTables (" 订单 ").DataCols.Contains (" 金额") Then DataTabIes ("订单").DataCoIs.DeIete (" 金额")End If 按钮或菜单 通过 Add 方法增加的临时列,可以用 Delete 方法删除14 DataCol 一列设公式,另列得结果 If = " 第一列 " Then If e.DataRow.IsNull (" 第一列 ") Thene.DataRow (" 第二列 ") = Nothing Elsee.DataRow (” 第二列")=EvaI (e.DataRow ("第一列 ”),e.DataRow ) End IfEnd IfFoxtable 常用代码汇总 1Col 打开列窗口 With Tables (" 员工 ").Cols ("照片").OpenWindow () .Cols ("备注").CIoseWindow () End With 按钮或菜单 2 Col 关闭列窗口 With Tables (" 员工 ") .Cols ("照片").OpenWindow () .Cols ("备注").CIoseWindow () End With 按钮或菜单 3 Col 移动列到指定位置 .Cols ("日期").Move (0) .Cols ("客户").Move (1) .Cols ("产品").Move (2)End With 4 With Tables (" 订单 ") 按钮或菜单 将日期、客户、产品移到前三列的位置冻结列 CurrentTable.Cols.Frozen = 2 按钮或菜单 冻结前两列 取消冻结列 CurrentTable.Cols.Frozen = 0 按钮或菜单 从 Table 中移除指定的列 If Tables (" 订单 ").Cols.Contains (" 折扣 ") Then Col Col Col Tables ("订单 ”).Cols.Remove (” 折扣")End If 按钮或菜单 在订单表中移除折扣列Tables ("订单”).Cols.Remove (”折扣",”金额")按钮或菜单 锁定某表某列 DataTables ("订单 ”).DataCols (” 折扣 ”).AIIowEdit = False 按钮或菜单 Col 一次移除多列 DataCol 按钮或菜单 9 菜单 DataCo l 取消锁定某表某列 DataTables (” 订单 ”).DataCols (” 折扣 ”).AIIowEdit = True 按钮或 10 DataCol 数量 * 单价 " DataTabIes ("订单").DataCoIs ("金额").Expression = ” 数量 属性只对表达式列有效 11 DataCol 返回列的名称 Output.Show ( ) 动态地修改表达式列的计算公式 For Each dc DataTabIes ("订单 ”).DataCols (” 金额").Expression =" * 单价 * (1 - 折扣 )" 按钮或菜单 ExpressionAsDataCol InDataTables (" 订 单").DataColsDataTables ("18 DataRowDataTable .AddNew () ' 增加一行 End With 按钮或菜单 19 DataRow 删除指定位置的行 .Delete (0) ' 删除第一行 End With按钮或菜单20 DataRow 清除所有行With DataTables ("单 ”).DataRows .Delete (0) ' 删除第一行 End With按钮或菜单21 DataRow 按日期列求月份 Dim dr AsDataRow =e.DataRow if =" 开始时间 " Thenif dr.IsNull (" 开始时间 ") = false Thendr (" 月") = dr (" 开始时间 ").Month Elsedr (" 月 ") = Nothing End IfEnd If 表 DataColChanged 事件 22 DataRow 新增行编号自动加1e.DataRow (” 编号")=pute ("Max (编号)")+ 1DataRowAdding 事件 假定表中有一个编号列,希望新增行的时候,编号列能够自动加1这个例子其实没有什么意义的,对于外部表使用自动增量主键列,对于内部表使用表达式列引用内部编 号列 “_Identidy 是”更,好的选择。
Foxtable通用代码汇总
Foxtable常用代码汇总1 Col 打开列窗口With Tables("员工").Cols("照片").OpenWindow().Cols("备注").CloseWindow()End With 按钮或菜单2 Col 关闭列窗口With Tables("员工").Cols("照片").OpenWindow().Cols("备注").CloseWindow()End With 按钮或菜单3 Col 移动列到指定位置With Tables("订单").Cols("日期").Move(0).Cols("客户").Move(1).Cols("产品").Move(2)End With 按钮或菜单将日期、客户、产品移到前三列的位置4 Col 冻结列CurrentTable.Cols.Frozen = 2 按钮或菜单冻结前两列5 Col 取消冻结列CurrentTable.Cols.Frozen = 0 按钮或菜单6 Col 从Table中移除指定的列If Tables("订单").Cols.Contains("折扣") ThenTables("订单").Cols.Remove("折扣")End If 按钮或菜单在订单表中移除折扣列7 Col 一次移除多列Tables("订单").Cols.Remove("折扣","金额") 按钮或菜单8 DataCol 锁定某表某列DataTables("订单").DataCols("折扣").AllowEdit = False 按钮或菜单9 DataCol 取消锁定某表某列DataTables("订单").DataCols("折扣").AllowEdit = True 按钮或菜单10 DataCol 动态地修改表达式列的计算公式DataTables("订单").DataCols("金额").Expression = "数量* 单价"DataTables("订单").DataCols("金额").Expression = "数量* 单价* (1 - 折扣)" 按钮或菜单Expression 属性只对表达式列有效11 DataCol 返回列的名称For Each dc As DataCol In DataTables("订单").DataCols Output.Show()Next 按钮或菜单列出订单表中所有列的名称12 DataCol 增加临时列,并可给临时列设置表达式DataTables("订单").DataCols.Add("金额", GetType(Double), "[数量] * [单价] * (1 - [折扣])") 按钮或菜单通过代码增加的临时列,在重新打开项目文件后,将不复存在13 DataCol 删除临时列If DataTables("订单").DataCols.Contains("金额") ThenDataTables("订单").DataCols.Delete("金额")End If 按钮或菜单通过Add方法增加的临时列,可以用Delete方法删除14 DataCol 一列设公式,另列得结果If = "第一列" ThenIf e.DataRow.IsNull("第一列") Thene.DataRow("第二列") = NothingElsee.DataRow("第二列") = Eval(e.DataRow("第一列"),e.DataRow)End IfEnd IfDataColChanged事件假定希望根据第一列输入的计算公式,在第二列得出计算结果15 DataRow删除行DataTables("订单").DataRows(0).Delete() 按钮或菜单删除订单表中的第一行Delete会返回逻辑值,如果删除成功,则返回True,否则返回False16 DataRow重新加载行DataTables("订单").DataRows(1).Load() 按钮或菜单重新加载订单表的第二行17 DataRow撤销修改DataTables("订单").DataRows(1).Load(False) 按钮或菜单撤销对订单表第二行的修改18 DataRowDataTable中增加一行 With DataTables("订单").DataRows.AddNew() '增加一行End With 按钮或菜单19 DataRow删除指定位置的行With DataTables("订单").DataRows.Delete(0) '删除第一行End With 按钮或菜单20 DataRow清除所有行With DataTables("单").DataRows.Delete(0) '删除第一行End With 按钮或菜单21 DataRow按日期列求月份Dim dr As DataRow =e.DataRowif ="开始时间" Thenif dr.IsNull("开始时间") = false Thendr("月") = dr("开始时间").MonthElsedr("月") = NothingEnd IfEnd If 表DataColChanged事件22 DataRow新增行编号自动加1 e.DataRow("编号") = pute("Max(编号)") + 1DataRowAdding事件假定表中有一个编号列,希望新增行的时候,编号列能够自动加1这个例子其实没有什么意义的,对于外部表使用自动增量主键列,对于内部表使用表达式列引用内部编号列“_Identidy”,是更好的选择。
FOXTABLE编程
数据绑定最简单的绑定首先还是打开我们的示例文件“专业报表.Table”,然后在命令窗口执行下面的代码:Dim doc As New PrintDocDim rt As New prt.RenderTextrt.DataBinding.DataSource = BindTables("订单") '将rt绑定到订单表rt.Text= "[Fields!产品.Value]" '设置打印字段doc.body.Children.Add(rt)doc.Preview()上述代码会打印出订单表中每一行的产品名称。
DataBinding用于设置打印对象的绑定属性,该属性包括一些子属性,DataSource表示数据来源,数据来源可以是Table,还可以是数组或者集合。
需要注意的是,不能直接绑定到Table,如果要绑定到Table,必须用BindTables来设置,例如:rt.DataBinding.DataSource = BindTables("订单")如果对象的内容来自于某一列,其Text属性的设置格式如下:[Fields!列名称.Value]使用表达式在命令窗口执行下面的代码:Dim doc As New PrintDocDim rt As New prt.RenderTextrt.DataBinding.DataSource = BindTables("订单") '将rt绑定到订单表rt.Text= "[Math.Round(Fields!金额.Value,1)]" '设置打印表达式doc.body.Children.Add(rt)doc.Preview()留意方括号中的内容:Math.Round(Fields!金额.Value,1)意思是打印的时候将金额列的内容,保留一位小数,你可以在Text属性中使用Foxtable支持的所有函数。
狐表开发实例
狐表开发实例一、背景介绍狐表是一款基于Python语言开发的轻量级数据可视化工具,它可以帮助用户快速地将数据转换成图表形式,便于数据分析和决策。
狐表支持多种数据源,包括Excel、CSV、MySQL等,同时也支持多种图表类型,如折线图、柱状图、饼图等。
二、安装及环境配置1. 安装Python:进入Python官网下载对应版本的Python安装包,根据提示进行安装。
2. 安装狐表:在命令行中输入“pip install foxcharts”进行安装。
3. 环境配置:在使用狐表前需要先导入相应的库文件,在Python中输入“import foxcharts”即可。
三、基本用法1. 数据导入:在使用狐表前需要先将数据导入到程序中。
可以通过以下代码实现:```import foxcharts as fcdata = fc.read_excel('data.xlsx') # 读取Excel文件```2. 图表绘制:在导入数据后即可开始绘制图表。
以下是一个简单的折线图绘制示例:```fc.plot(data, x='日期', y='销售额', title='2019年销售额',chart_type='line')```其中x表示横坐标列名,y表示纵坐标列名,title表示图表标题,chart_type表示图表类型。
四、高级用法1. 多图表绘制:可以通过subplot函数绘制多个图表。
以下是一个简单的例子:```import matplotlib.pyplot as pltfig, axes = plt.subplots(2, 2)fc.plot(data, x='日期', y='销售额', title='2019年销售额',chart_type='line', ax=axes[0, 0])fc.plot(data, x='日期', y='访问量', title='2019年访问量',chart_type='line', ax=axes[0, 1])fc.plot(data, x='日期', y=['销售额','访问量'], title='2019年销售额和访问量对比', chart_type='barh', ax=axes[1, :])```其中ax参数表示子图的位置。
Foxtable所有范例代码
=====Excel图表.foxdb=====项目事件AfterO penPr ojectForms("图表设置").Open()计划管理表事件窗口表事件窗口与控件事件图表设置_AfterL oadDim x,y As StringDim i As Intege rFor Each c As Col In Curren ttabl e.ColsIf c.Visibl e Theni = i + 1If c.Dataco l.IsNume ric Theny = y & "|【" & i & "】" & c.Captio nElsex = x & "|【" & i & "】" & c.Captio nEnd IfEnd IfNexte.Form.Contro ls("Checke dComb oBox1").ComboL ist = y.Trim("|")e.Form.Contro ls("Checke dComb oBox2").ComboL ist = x.Trim("|") 图表设置_Button1_Cli ckexStr= "图表区"Forms("图表外观").Open图表设置_Button2_Cli ckexStr= "绘图区"Forms("图表外观").Open图表设置_Button3_Cli ckexStr= "图例"Forms("图表外观").Open图表设置_Button4_Cli ckexStr= "标题"Forms("图表外观").Open图表设置_Button5_Cli ck'对数据列验证Dim y As String = e.Form.Contro ls("Checke dComb oBox1").ValueDim x As String = e.Form.Contro ls("Checke dComb oBox2").ValueIf y = "" ThenMessag eBox.Show("数据系列中的数值轴(Y)必须设置! ","信息提示",Messag eBoxB utton s.OK,Messag eBoxI con.Warnin g)ReturnElseIf e.Form.Contro ls("ListBo x1").ComboL ist = "" ThenMessag eBox.Show("数值轴(Y)不能全部设置为次坐标轴! ","信息提示",Messag eBoxB utton s.OK,Messag eBoxI con.Warnin g)ReturnEnd IfEnd IfDim ksl,jsl As Intege r 'x轴的起始列与结束列If x <> "" ThenDim xs As String() = x.Split(",")If xs.Length > 1 '如果x轴有多列Dim xsn(xs.Length-1) As Intege rFor n As Intege r = 0 To xs.Length - 1xsn(n) = xs(n).SubStr ing(1,xs(n).LastIn dexOf("】")-1)NextArray.Sort(xsn) '得到各列的序号,并排序For n As Intege r = 1 To xsn.Length - 1If xsn(n) - xsn(n-1) > 1Messag eBox.Show("如果X轴的分类列有多个, 那么它必须是连续的! ","信息提示",Messag eBoxB utton s.OK,Messag eBoxI con.Warnin g)ReturnEnd IfNextksl = xsn(0)jsl = xsn(xsn.Length-1)Elseksl = x.SubStr ing(1,stIn dexOf("】")-1)jsl = kslEnd IfEnd If'定义ExcelDim f As String = Projec tPath & "Excel数据.xls"Dim t As Table= Curren tTabl eDim flg As New SaveEx celFl agsflg.CellSt yle = Truet.SaveEx cel(f,,flg) '导出数据到指定文件Dim App As New MSExce l.Applic ationApp.Displa yAler ts = FalseDim Wb As MSExce l.WorkBo ok = App.WorkBo oks.Open(f)Dim Ws As MSExce l.WorkSh eet = Wb.WorkSh eets(1)Dim i As Intege r = e.Form.Contro ls("Numeri cComb oBox1").Value '指定大小Dim j As Intege r = e.Form.Contro ls("Numeri cComb oBox2").ValueDim rg As MSExce l.Range= Ws.Cells(t.Header Rows+ t.Rows.Count,1)Dim Co As MSExce l.ChartO bject = Ws.ChartO bject s.Add(rg.Left,rg.Top,i,j) '在最末行的第一个单元格处生成图表Ws.Drawin gObje cts(1).Shadow = e.Form.Contro ls("CheckB ox1").Checke d '阴影Ws.Drawin gObje cts(1).Rounde dCorn ers = e.Form.Contro ls("CheckB ox2").Checke d '圆角Dim Cht As MSExce l.Chart= Co.ChartFuncti ons.Execut e("App_Wg sz","图表区",Wb,Cht,1,2,3) '设置图表区外观,此行不能放到后面,否则将替代其它对象的设置'图表类型并指定y轴和绘图方式Cht.ChartT ype =Functi ons.Execut e("App_Ch artTy pe",e.Form.Contro ls("ComboB ox1").Value,e.Form.Contro ls("ComboB ox2" ).Value)Dim cs As String() = y.Split(",")Dim lh As Intege rDim ar As StringDim firstAs Intege r = Curren tTabl e.Header Rows+ 1 '数据记录的起始行Dim last As Intege r = Curren tTabl e.Header Rows+ Curren tTabl e.Rows.Count '数据记录的结束行For Each c As String In cslh = c.SubStr ing(1,stIn dexOf("】")-1)ar = ar & "," & Functi ons.Execut e("App_Co lChr",lh) & first& ":" &Functi ons.Execut e("App_Co lChr",lh) & lastNextar = ar.Trim(",")rg = Ws.Range(ar)If e.Form.Contro ls("ComboB ox2").Value.Contai ns("饼图") ThenDim ars As String() = ar.Split(",")If ars.Length > 1 Thenrg = Ws.Range(ars(0))End IfEnd IfIf e.Form.Contro ls("CheckB ox10").Checke d ThenCht.SetSou rceDa ta(rg,MSExce l.XlRowC ol.xlColu mns) '数据产生自列ElseCht.SetSou rceDa ta(rg,MSExce l.XlRowC ol.xlRows) '数据产生于行End IfFuncti ons.Execut e("App_Wg sz","绘图区",Wb,Cht,4,5,6) '绘图区的外观设置'指定x轴的分类列区域Dim xbz As StringIf x <> "" Thenxbz = "=" & & "!R" & first& "C" & ksl & ":R" & last & "C" & jslIf e.Form.Contro ls("CheckB ox5").Checke d Then '合并单元格For m As Intege r = jsl To ksl Step -1Dim hh As Intege r = firstFor n As Intege r = first+1 To last+1If Ws.Cells(n,m).Value<> Ws.Cells(hh,m).ValueThenrg = Ws.Range(Ws.Cells(hh,m),Ws.Cells(n-1,m))If m = ksl Thenrg.Mergerg.Vertic alAli gnmen t = MSExce l.Consta nts.xlCent erhh = nElseif Ws.Cells(n,m-1).Value= Ws.Cells(hh,m-1).ValueThenrg.Mergerg.Vertic alAli gnmen t = MSExce l.Consta nts.xlCent erhh = nEnd IfEnd IfNextNextEnd IfEnd If'设置每个数据系列Dim czb As String = e.Form.Contro ls("Checke dComb oBox3").ValueDim czbs As New List(Of String) '次坐标轴集合If czb > "" Thenczbs.AddRan ge(czb.Split(","))End IfDim s As MSExce l.SeriesDim ys As Intege r = 15 '颜色序号从15开始For n As Intege r = 1 To cs.LengthIf e.Form.Contro ls("ComboB ox2").Value.Contai ns("饼图") ThenIf n > 1 ThenExit ForEnd IfEnd Ifs = Cht.Series Colle ction(n)If x <> "" Thens.XValue s = xbz '指定对应的x轴End If = cs(n-1).SubStr ing(cs(n-1).LastIn dexOf("】")+1) '系列名称If czbs.Contai ns(cs(n-1)) '如果在次坐标集合中找到对应的内容s.AxisGr oup = 2End IfFuncti ons.Execut e("App_Se ries","数据系列_" & ,Wb,s,ys+1,ys+2,ys+3)ys = ys+3Next'设置坐标轴If e.Form.Contro ls("ComboB ox1").Value<> "饼图" ThenDim y1min,y1max,y2min,y2maxAs Intege r '设置刻度If czb > "" Then '如果有主轴和次轴就要分别设置ar = ""Dim br As StringDim lst1() As String = e.Form.Contro ls("ListBo x1").Combol ist.Split(Chr(13)) Dim lst2() As String = e.Form.Contro ls("ListBo x2").Combol ist.Split(Chr(13)) For Each c As String In lst1lh = c.SubStr ing(1,stIn dexOf("】")-1)ar = ar & "," & Functi ons.Execut e("App_Co lChr",lh) & first& ":" & Functi ons.Execut e("App_Co lChr",lh) & lastNextFor Each c As String In lst2lh = c.SubStr ing(1,stIn dexOf("】")-1)br = br & "," & Functi ons.Execut e("App_Co lChr",lh) & first& ":" & Functi ons.Execut e("App_Co lChr",lh) & lastNextrg = Ws.Range(ar.Trim(","))y1min= App.Worksh eetFu nctio n.Min(rg)y1max= App.Worksh eetFu nctio n.Max(rg)With Cht.Axes(MSExce l.XlAxis Type.xlValu e).Minimu mScal e = y1min.Maximu mScal e = y1maxEnd Withrg = Ws.Range(br.Trim(","))y2min= App.Worksh eetFu nctio n.Min(rg)y2max= App.Worksh eetFu nctio n.Max(rg)With Cht.Axes(MSExce l.XlAxis Type.xlValu e,2).Minimu mScal e = y2min.Maximu mScal e = y2maxEnd WithElse '否则只要设置主轴刻度y1min= App.Worksh eetFu nctio n.Min(Ws.Range(ar))y1max= App.Worksh eetFu nctio n.Max(Ws.Range(ar))With Cht.Axes(MSExce l.XlAxis Type.xlValu e).Minimu mScal e = y1min.Maximu mScal e = y1maxEnd WithEnd IfIf e.Form.Contro ls("CheckB ox11").Checke d And e.Form.Contro ls("TextBo x3").Value<> "" Then With Cht.Axes(MSExce l.XlAxis Type.xlCate gory) '设置X轴标题网格.HasTit le = True.AxisTi tle.Text = e.Form.Contro ls("TextBo x3").Value.HasMaj orGri dline s = e.Form.Contro ls("CheckB ox12").Checke d.HasMin orGri dline s = e.Form.Contro ls("CheckB ox13").Checke dEnd WithEnd IfIf e.Form.Contro ls("CheckB ox6").Checke d And e.Form.Contro ls("TextBo x1").Value<> "" ThenWith Cht.Axes(MSExce l.XlAxis Type.xlValu e,1) '设置Y主轴标题网格.HasTit le = True.AxisTi tle.Text = e.Form.Contro ls("TextBo x1").Value.HasMaj orGri dline s = e.Form.Contro ls("CheckB ox7").Checke d.HasMin orGri dline s = e.Form.Contro ls("CheckB ox8").Checke dEnd WithEnd IfIf e.Form.Contro ls("CheckB ox9").Enable d And e.Form.Contro ls("CheckB ox9").Checke d Ande.Form.Contro ls("TextBo x2").Value<> "" ThenWith Cht.Axes(MSExce l.XlAxis Type.xlValu e,2) '设置Y次轴标题网格.HasTit le = True.AxisTi tle.Text = e.Form.Contro ls("TextBo x2").ValueEnd WithEnd IfEnd If'图例Dim sfxs As Boolea n = e.Form.Contro ls("CheckB ox3").Checke dCht.HasLeg end = sfxsIf sfxs ThenFuncti ons.Execut e("App_Wg sz","图例",Wb,Cht,7,8,9)End If'标题sfxs = e.Form.Contro ls("CheckB ox4").Checke dCht.HasTit le = sfxsIf sfxs ThenFuncti ons.Execut e("App_Wg sz","标题",Wb,Cht,10,11,12)End If'显示表格sfxs = e.Form.Contro ls("CheckB ox14").Checke dCht.Hasdat atabl e = sfxsApp.Visibl e = True图表设置_Button6_Cli ckDim cb As WinFor m.Checke dComb oBox= e.Form.Contro ls("Checke dComb oBox3")Dim tblx As String = e.Form.Contro ls("ComboB ox2").ValueIf tblx.Contai ns("三维") Or tblx.Contai ns("饼图") Or tblx.Contai ns("圆柱") Or tblx.Contai ns("圆锥") Or tblx.Contai ns("棱锥") Thencb.Enable d = Falsecb.Value= ""Elsecb.Enable d = TrueEnd If'数据系列Dim z As String = e.Form.Contro ls("Checke dComb oBox1").ValueDim zs As String()If z > "" Thenzs = z.Split(",")If zs.Length > 1 ThenboL ist = z.Replac e(",","|")Elsecb.Value= ""End IfElsecb.Value= ""End IfDim c As String = cb.ValueIf c > "" Thene.Form.Contro ls("CheckB ox9").Enable d = Truezs = z.Split(",") '所有数据列集合Dim zls As New List(Of String)zls.AddRan ge(zs)Dim cs As String() = c.Split(",") '次轴数据列集合Dim cls As New List(Of String)cls.AddRan ge(cs)For i As Intege r = 0 To cls.Count- 1Dim va As String = cls(i)If zls.Contai ns(va) Thenzls.Remove(va)Elsecls.Remove(va)End IfNextDim zxx As StringIf zls.Count> 0 ThenFor Each cn As String In zlszxx = zxx & "|" & cnNextzxx = zxx.Trim("|")End Ife.Form.Contro ls("ListBo x1").ComboL ist = zxxzxx = ""If cls.Count> 0 ThenFor Each cn As String In clszxx = zxx & "|" & cnNextzxx = zxx.Trim("|")End Ife.Form.Contro ls("ListBo x2").ComboL ist = zxxElseIf z > "" Thene.Form.Contro ls("ListBo x1").ComboL ist = z.Replac e(",","|") End Ife.Form.Contro ls("ListBo x2").ComboL ist = ""e.Form.Contro ls("CheckB ox9").Enable d = FalseEnd If图表设置_Button7_Cli cke.Form.Close图表设置_CheckB ox11_Check edCha ngede.Form.Contro ls("TextBo x3").Enable d = e.Sender.Checke de.Form.Contro ls("CheckB ox12").Enable d = e.Sender.Checke de.Form.Contro ls("CheckB ox13").Enable d = e.Sender.Checke d图表设置_CheckB ox3_C hecke dChan gede.Form.Contro ls("Button3").Enable d = e.Sender.Checke d图表设置_CheckB ox4_C hecke dChan gede.Form.Contro ls("Button4").Enable d = e.Sender.Checke d图表设置_CheckB ox6_C hecke dChan gede.Form.Contro ls("TextBo x1").Enable d = e.Sender.Checke de.Form.Contro ls("CheckB ox7").Enable d = e.Sender.Checke de.Form.Contro ls("CheckB ox8").Enable d = e.Sender.Checke d图表设置_CheckB ox9_C hecke dChan gede.Form.Contro ls("TextBo x2").Enable d = e.Sender.Checke d图表设置_Checke dComb oBox1_Text Chang ede.Form.Contro ls("Button6").Perfor mClic k图表设置_Checke dComb oBox2_Text Chang edDim cb As WinFor m.CheckB ox = e.Form.Contro ls("CheckB ox5")cb.Enable d = Falsecb.Checke d = FalseDim xx As String = e.Sender.ValueIf xx <> "" Thencb.Enable d = Truecb.Checke d = TrueEnd If图表设置_Checke dComb oBox3_Text Chang ede.Form.Contro ls("Button6").Perfor mClic k图表设置_ComboB ox1_V alueC hange dDim lst As String = Functi ons.Execut e("App_Ch arts",e.Sender.Value) e.Form.Contro ls("ComboB ox2").ComboL ist = lstDim lsts As String() = lst.Split("|")e.Form.Contro ls("ComboB ox2").Value= lsts(0)图表设置_ComboB ox2_V alueC hange de.Form.Contro ls("Button6").Perfor mClic k图表设置_ListBo x1_Do ubleC lickDim v As String = e.Sender.ValueIf v > "" Thenv = v.SubStr ing(v.IndexO f("】")+1)exStr= "Z数据系列_" & vForms("图表数据系列").OpenEnd If图表设置_ListBo x2_Do ubleC lickDim v As String = e.Sender.ValueIf v > "" Thenv = v.SubStr ing(v.IndexO f("】")+1)exStr= "C数据系列_" & vForms("图表数据系列").OpenEnd If图表数据系列_Afte rLoadDim lx As String = exStrIf lx.SubStr ing(0,1) = "Z" Then '如果是主轴的数据系列,不允许设置类型e.Form.Contro ls("GroupB ox1").Enable d = FalseIf Forms("图表设置").Contro ls("ComboB ox1").Value= "饼图" Thene.Form.Contro ls("CheckB ox3").Enable d = TrueEnd IfEnd Iflx = lx.SubStr ing(lx.IndexO f("_")+1)e.Form.Text = "数据系列【" & lx & "】格式设置"Dim f As String = Projec tPath & "Net\Chart\数据系列_" & lx & ".txt"If FileSy s.FileEx ists(f) ThenDim vs As String() = FileSy s.ReadAl lText(f).Split("ㄉ")Dim v As String = vs(1)vs = v.Split(",")'系列名称e.Form.Contro ls("TextBo x1").Value= vs(0)'图表类型Dim lxs As String() = Functi ons.Execut e("App_Ch artNu m",vs(1)).Split(",")e.Form.Contro ls("ComboB ox1").Value= lxs(0)e.Form.Contro ls("ComboB ox2").Value= lxs(1)'数据标签e.Form.Contro ls("CheckB ox1").Checke d = vs(2)e.Form.Contro ls("CheckB ox2").Checke d = vs(3)e.Form.Contro ls("CheckB ox3").Checke d = vs(4)'分色显示e.Form.Contro ls("CheckB ox4").Checke d = vs(5)Elsee.Form.Contro ls("TextBo x1").Value= lxEnd IfIf e.Form.Contro ls("CheckB ox3").Enable d = FalseThene.Form.Contro ls("CheckB ox3").Checke d = FalseEnd If图表数据系列_Butt on1_C lickForms("图表外观").Open图表数据系列_Butt on2_C lickDim xlmc As String = e.Form.Contro ls("TextBo x1").ValueIf xlmc = "" ThenMessag eBox.Show("数据系列名称不能为空! ","信息提示",Messag eBoxB utton s.OK,Messag eBoxI con.Warnin g)ReturnElseif xlmc.Contai ns(",") ThenMessag eBox.Show("数据系列名称中不能包含半角逗号! ","信息提示",Messag eBoxB utton s.OK,Messag eBoxI con.Warnin g)ReturnEnd IfDim tblx As Intege r =Functi ons.Execut e("App_Ch artTy pe",e.Form.Contro ls("ComboB ox1").Value,e.Form.Contro ls("ComboB ox2" ).Value)Dim flmc As Boolea n = e.Form.Contro ls("CheckB ox1").Checke dDim sz As Boolea n = e.Form.Contro ls("CheckB ox2").Checke dDim bfb As Boolea n = e.Form.Contro ls("CheckB ox3").Checke dDim fs As Boolea n = e.Form.Contro ls("CheckB ox4").Checke d'保存设置Dim str As String = xlmc & "," & tblx & "," & flmc & "," & sz & "," & bfb & "," & fsDim f As String = Projec tPath & "Net\Chart\" & exStr.SubStr ing(1) & ".txt" '保存文件名If Not FileSy s.FileEx ists(f) ThenIf Not FileSy s.Direct oryEx ists(Projec tPath & "Net\Chart") ThenFileSy s.Create Direc tory(Projec tPath & "Net\Chart")End Ifstr = "宋体,0,9,0,0,0,0,0,0,0,3,255,255,255,False,True,4,False,13,False,,,靠右ㄉ" & str ElseDim vs As String() = FileSy s.ReadAl lText(f).Split("ㄉ")Dim qtz As String = vs(0)str = qtz & "ㄉ" & strEnd IfFileSy s.WriteA llTex t(f,str,False)e.Form.Close图表数据系列_Butt on3_C licke.Form.Close图表数据系列_Comb oBox1_Valu eChan gedDim lst As String = Functi ons.Execut e("App_Ch arts",e.Sender.Value)Dim lsts As String() = lst.Split("|")lst = ""For Each l As String In lstsIf Not l.Contai ns("三维") Thenlst = lst & "|" & lEnd IfNextlst = lst.Trim("|")e.Form.Contro ls("ComboB ox2").ComboL ist = lstlsts = lst.Split("|")e.Form.Contro ls("ComboB ox2").Value= lsts(0)图表外观_AfterL oadDim lx As String = exStre.Form.Text = "【" & lx & "】项目设置"If lx.Contai ns("数据系列") Thene.Form.Text = "【" & lx.SubStr ing(lx.IndexO f("_")+1) & "】项目设置"lx = lx.SubStr ing(1)End IfIf lx = "绘图区" Thene.Form.Contro ls("GroupB ox3").Enable d = FalseEnd IfIf lx <> "标题" Thene.Form.Contro ls("GroupB ox4").Enable d = FalseEnd IfIf lx <> "图例" Thene.Form.Contro ls("GroupB ox5").Enable d = FalseEnd IfDim f As String = Projec tPath & "Net\Chart\" & lx & ".txt"If FileSy s.FileEx ists(f) ThenDim vs As String() = FileSy s.ReadAl lText(f).Split(",")If lx.Contai ns("数据系列") Thenvs = FileSy s.ReadAl lText(f).Split("ㄉ")Dim szz As String = vs(0)vs = szz.Split(",")End If'字体Dim zt1 As String = vs(0)Dim zt2 As FontSt yle = vs(1)Dim zt3 As Intege r = vs(2)e.Form.Contro ls("TextBo x1").Font = New Font(zt1,zt3,zt2)e.Form.Contro ls("TextBo x1").ForeCo lor = Color.FromAR GB(vs(3),vs(4),vs(5))'边框样式Dim ss As String() = e.Form.Contro ls("ComboB ox1").ComboL ist.Split(Chr(13))e.Form.Contro ls("ComboB ox1").Value= ss(vs(6))'边框颜色e.Form.Contro ls("ColorL abel1").BackCo lor = Color.FromAR GB(vs(7),vs(8),vs(9))'边框粗细ss = e.Form.Contro ls("ComboB ox2").ComboL ist.Split(Chr(13))e.Form.Contro ls("ComboB ox2").Value= ss(vs(10)-1)'填充颜色e.Form.Contro ls("ColorL abel2").BackCo lor = Color.FromAR GB(vs(11),vs(12),vs(13)) '是否启用填充效果e.Form.Contro ls("CheckB ox1").Checke d = vs(14)'渐变方向e.Form.Contro ls("RadioB utton1").Checke d = vs(15)ss = e.Form.Contro ls("ComboB ox3").ComboL ist.Split(Chr(13))If vs(16) = 7 Thene.Form.Contro ls("ComboB ox3").Value= "中心辐射"Elsee.Form.Contro ls("ComboB ox3").Value= ss(vs(16)-1)End If'纹理图案e.Form.Contro ls("RadioB utton2").Checke d = vs(17)ss = e.Form.Contro ls("ComboB ox4").ComboL ist.Split(Chr(13)) e.Form.Contro ls("ComboB ox4").Value= ss(vs(18)-1)'背景图片e.Form.Contro ls("RadioB utton3").Checke d = vs(19)e.Form.Contro ls("TextBo x2").Value= vs(20)'标题e.Form.Contro ls("TextBo x3").Value= vs(21)'图例e.Form.Contro ls("ComboB ox5").Value= vs(22)End If图表外观_Button1_Cli cke.Form.Close图表外观_Button2_Cli ckDim s As New Window s.Forms.FontDi alogs.ShowCo lor = Trues.Font = e.Form.Contro ls("TextBo x1").Fonts.Color= e.Form.Contro ls("TextBo x1").ForeCo lorIf s.ShowDi alog= Dialog Resul t.OK Thene.Form.Contro ls("TextBo x1").Font = s.Fonte.Form.Contro ls("TextBo x1").ForeCo lor = s.ColorEnd If图表外观_Button4_Cli ckDim style,weight,gradie nt,textur e As Intege rDim r1,g1,b1,r2,g2,b2,r3,g3,b3 As Intege r'字体设置Dim fn As String = e.Form.Contro ls("TextBo x1")Dim fs As Intege r = e.Form.Contro ls("TextBo x1").Font.StyleDim fsizeAs Intege r = e.Form.Contro ls("TextBo x1").Font.Size Dim RGBCol or As Color= e.Form.Contro ls("TextBo x1").ForeCo lor r1 = RGBCol or.Rg1 = RGBCol or.Gb1 = RGBCol or.B'边框样式Select e.Form.Contro ls("ComboB ox1").ValueCase "无"style= 0Case "实线"style= 1Case "不连续线"style= 2Case "单点连续线"style= 3Case "单点单线结合"Case "双点单线结合"style= 5End Select'边框颜色RGBCol or = e.Form.Contro ls("ColorL abel1").BackCo lor r2 = RGBCol or.Rg2 = RGBCol or.Gb2 = RGBCol or.B'边框粗细Select e.Form.Contro ls("ComboB ox2").ValueCase "最细"weight = 1Case "细"weight = 2Case "中等"weight = 3Case "粗"weight = 4End Select'填充颜色RGBCol or = e.Form.Contro ls("ColorL abel2").BackCo lor r3 = RGBCol or.Rg3 = RGBCol or.Gb3 = RGBCol or.B'渐变方向Select e.Form.Contro ls("ComboB ox3").ValueCase "水平"gradie nt = 1Case "垂直"gradie nt = 2Case "斜上"gradie nt = 3Case "斜下"gradie nt = 4Case "角部辐射"gradie nt = 5Case "中心辐射"gradie nt = 7End Select'纹理图案Select e.Form.Contro ls("ComboB ox4").ValueCase "纸莎草纸"textur e = 1Case "画布"textur e = 2Case "斜纹布"textur e = 3Case "编织物"textur e = 4Case "水滴"textur e = 5Case "纸袋"textur e = 6Case "鱼类化石"Case "沙滩"textur e = 8Case "绿色大理石"textur e = 9Case "白色大理石"textur e = 10Case "褐色大理石"textur e = 11Case "花岗岩"textur e = 12Case "新闻纸"textur e = 13Case "再生纸"textur e = 14Case "羊皮纸"textur e = 15Case "信纸"textur e = 16Case "蓝色面巾纸"textur e = 17Case "粉色面巾纸"textur e = 18Case "紫色网格"textur e = 19Case "花束"textur e = 20Case "软木塞"textur e = 21Case "胡桃"textur e = 22Case "栎木"textur e = 23Case "深色木质"textur e = 24End Select'其它设置Dim sfxg As Boolea n = e.Form.Contro ls("CheckB ox1").Checke dDim rd1 As Boolea n = e.Form.Contro ls("RadioB utton1").Checke dDim rd2 As Boolea n = e.Form.Contro ls("RadioB utton2").Checke dDim rd3 As Boolea n = e.Form.Contro ls("RadioB utton3").Checke dDim f As String = e.Form.Contro ls("TextBo x2").ValueDim bt As String = e.Form.Contro ls("TextBo x3").ValueDim wz As String = e.Form.Contro ls("ComboB ox5").Value'保存设置Dim str As String = fn & "," & fs & "," & fsize& "," & r1 & "," & g1 & "," & b1 & _"," & style& "," & r2 & "," & g2 & "," & b2 & "," & weight & _"," & r3 & "," & g3 & "," & b3 & "," & sfxg & _"," & rd1 & "," & gradie nt & "," & rd2 & "," & textur e & "," & rd3 & "," & f & "," & bt & "," & wz f = Projec tPath & "Net\Chart" '检查路径是否存在If Not FileSy s.Direct oryEx ists(f) ThenFileSy s.Create Direc tory(f)End IfDim lx As String = exStrf = f & "\" & lx & ".txt" '保存文件名If lx.Contai ns("数据系列") Thenf = f.Replac e(lx,lx.SubStr ing(1))str = str & "ㄉ"If FileSy s.FileEx ists(f) ThenDim vs As String() = FileSy s.ReadAl lText(f).Split("ㄉ") Dim qtz As String = vs(1)str = str & qtzEnd IfEnd IfFileSy s.WriteA llTex t(f,str,False)e.Form.Close图表外观_CheckB ox1_C hecke dChan gede.Form.Contro ls("GroupB ox2").Enable d = e.Sender.Checke d图表外观_RadioB utton1_Che ckedC hange de.Form.Contro ls("ComboB ox3").Enable d = e.Sender.Checke d图表外观_RadioB utton2_Che ckedC hange de.Form.Contro ls("ComboB ox4").Enable d = e.Sender.Checke d图表外观_RadioB utton3_Che ckedC hange de.Form.Contro ls("TextBo x1").Enable d = e.Sender.Checke d图表外观_TextBo x2_Do ubleC lickDim f As New OpenFi leDia logf.Filter= "图片文件|*.jpg;*.bmp;*.gif"If f.ShowDi alog= Dialog Resul t.Ok Thene.Form.Contro ls("TextBo x1").Value=f.FileNa meEnd If自定义函数App_Ch artNu mDim tblx As StringSelect Case Args(0)Case 51tblx = "柱形图,簇状柱形图"Case 52tblx = "柱形图,堆积柱形图"Case 53tblx = "柱形图,百分比堆积柱形图"Case 57tblx = "条形图,簇状条形图"Case 58tblx = "条形图,堆积条形图"Case 59tblx = "条形图,百分比堆积条形图"Case 4tblx = "折线图,折线图"Case 65tblx = "折线图,数据点折线图"Case 63tblx = "折线图,堆积折线图"Case 66tblx = "折线图,堆积数据点折线图"Case 64tblx = "折线图,百分比堆积折线图"Case 67tblx = "折线图,百分比堆积数据点折线图"Case 1tblx = "面积图,面积图"Case 76tblx = "面积图,堆积面积图"Case 77tblx = "面积图,百分比堆积面积图"End SelectReturn tblxApp_Ch artsDim lst As StringSelect Case Args(0)Case "柱形图"lst = "簇状柱形图|三维簇状柱形图|堆积柱形图|三维堆积柱形图|百分比堆积柱形图|三维百分比堆积柱形图|三维柱形图"Case "条形图"lst = "簇状条形图|三维簇状条形图|堆积条形图|三维堆积条形图|百分比堆积条形图|三维百分比堆积条形图"Case "折线图"lst = "折线图|数据点折线图|堆积折线图|堆积数据点折线图|百分比堆积折线图|百分比堆积数据点折线图|三维折线图"Case "饼图"lst = "饼图|分离型饼图|三维饼图|三维分离型饼图|复合饼图|复合条饼图"Case "面积图"lst = "面积图|三维面积图|堆积面积图|三维堆积面积图|百分比堆积面积图|三维百分比堆积面积图"Case "圆柱图"lst = "柱形圆柱图|条形圆柱图|堆积柱形圆柱图|堆积条形圆柱图|百分比堆积柱形圆柱图|百分比堆积条形圆柱图|三维柱形圆柱图"Case "圆锥图"lst = "柱形圆锥图|条形圆锥图|堆积柱形圆锥图|堆积条形圆锥图|百分比堆积柱形圆锥图|百分比堆积条形圆锥图|三维柱形圆锥图"Case "棱锥图"lst = "柱形棱锥图|条形棱锥图|堆积柱形棱锥图|堆积条形棱锥图|百分比堆积柱形棱锥图|百分比堆积条形棱锥图|三维柱形棱锥图"End SelectReturn lstApp_Ch artTy peDim tblx As Intege rSelect Case Args(0)Case "柱形图"。
Foxtable所有范例代码
=====Excel图表.foxdb=====项目事件AfterOpenProjectForms("图表设置").Open()计划管理表事件窗口表事件窗口与控件事件图表设置_AfterLoadDim x,y As StringDim i As IntegerFor Each c As Col In Currenttable.ColsIf c.Visible Theni = i + 1If c.Datacol.IsNumeric Theny = y & "|【" & i & "】" & c.CaptionElsex = x & "|【" & i & "】" & c.CaptionEnd IfEnd IfNexte.Form.Controls("CheckedComboBox1").ComboList = y.Trim("|")e.Form.Controls("CheckedComboBox2").ComboList = x.Trim("|") 图表设置_Button1_ClickexStr = "图表区"Forms("图表外观").Open图表设置_Button2_ClickexStr = "绘图区"Forms("图表外观").Open图表设置_Button3_ClickexStr = "图例"Forms("图表外观").Open图表设置_Button4_ClickexStr = "标题"Forms("图表外观").Open图表设置_Button5_Click'对数据列验证Dim y As String = e.Form.Controls("CheckedComboBox1").ValueDim x As String = e.Form.Controls("CheckedComboBox2").ValueIf y = "" ThenMessageBox.Show("数据系列中的数值轴(Y)必须设置! ","信息提示",MessageBoxButtons.OK,MessageBoxIcon.Warning)ReturnElseIf e.Form.Controls("ListBox1").ComboList = "" ThenMessageBox.Show("数值轴(Y)不能全部设置为次坐标轴! ","信息提示",MessageBoxButtons.OK,MessageBoxIcon.Warning)ReturnEnd IfEnd IfDim ksl,jsl As Integer 'x轴的起始列与结束列If x <> "" ThenDim xs As String() = x.Split(",")If xs.Length > 1 '如果x轴有多列Dim xsn(xs.Length-1) As IntegerFor n As Integer = 0 To xs.Length - 1xsn(n) = xs(n).SubString(1,xs(n).LastIndexOf("】")-1)NextArray.Sort(xsn) '得到各列的序号,并排序For n As Integer = 1 To xsn.Length - 1If xsn(n) - xsn(n-1) > 1MessageBox.Show("如果X轴的分类列有多个, 那么它必须是连续的! ","信息提示",MessageBoxButtons.OK,MessageBoxIcon.Warning)ReturnEnd IfNextksl = xsn(0)jsl = xsn(xsn.Length-1)Elseksl = x.SubString(1,stIndexOf("】")-1)jsl = kslEnd IfEnd If'定义ExcelDim f As String = ProjectPath & "Excel数据.xls"Dim t As Table = CurrentTableDim flg As New SaveExcelFlagsflg.CellStyle = Truet.SaveExcel(f,,flg) '导出数据到指定文件Dim App As New MSExcel.ApplicationApp.DisplayAlerts = FalseDim Wb As MSExcel.WorkBook = App.WorkBooks.Open(f)Dim Ws As MSExcel.WorkSheet = Wb.WorkSheets(1)Dim i As Integer = e.Form.Controls("NumericComboBox1").Value '指定大小Dim j As Integer = e.Form.Controls("NumericComboBox2").ValueDim rg As MSExcel.Range = Ws.Cells(t.HeaderRows + t.Rows.Count,1)Dim Co As MSExcel.ChartObject = Ws.ChartObjects.Add(rg.Left,rg.Top,i,j) '在最末行的第一个单元格处生成图表Ws.DrawingObjects(1).Shadow = e.Form.Controls("CheckBox1").Checked '阴影Ws.DrawingObjects(1).RoundedCorners = e.Form.Controls("CheckBox2").Checked '圆角Dim Cht As MSExcel.Chart = Co.ChartFunctions.Execute("App_Wgsz","图表区",Wb,Cht,1,2,3) '设置图表区外观,此行不能放到后面,否则将替代其它对象的设置'图表类型并指定y轴和绘图方式Cht.ChartType =Functions.Execute("App_ChartType",e.Form.Controls("ComboBox1").Value,e.Form.Controls("ComboBox2" ).Value)Dim cs As String() = y.Split(",")Dim lh As IntegerDim ar As StringDim first As Integer = CurrentTable.HeaderRows + 1 '数据记录的起始行Dim last As Integer = CurrentTable.HeaderRows + CurrentTable.Rows.Count '数据记录的结束行For Each c As String In cslh = c.SubString(1,stIndexOf("】")-1)ar = ar & "," & Functions.Execute("App_ColChr",lh) & first & ":" &Functions.Execute("App_ColChr",lh) & lastNextar = ar.Trim(",")rg = Ws.Range(ar)If e.Form.Controls("ComboBox2").Value.Contains("饼图") ThenDim ars As String() = ar.Split(",")If ars.Length > 1 Thenrg = Ws.Range(ars(0))End IfEnd IfIf e.Form.Controls("CheckBox10").Checked ThenCht.SetSourceData(rg,MSExcel.XlRowCol.xlColumns) '数据产生自列ElseCht.SetSourceData(rg,MSExcel.XlRowCol.xlRows) '数据产生于行End IfFunctions.Execute("App_Wgsz","绘图区",Wb,Cht,4,5,6) '绘图区的外观设置'指定x轴的分类列区域Dim xbz As StringIf x <> "" Thenxbz = "=" & & "!R" & first & "C" & ksl & ":R" & last & "C" & jslIf e.Form.Controls("CheckBox5").Checked Then '合并单元格For m As Integer = jsl To ksl Step -1Dim hh As Integer = firstFor n As Integer = first+1 To last+1If Ws.Cells(n,m).Value <> Ws.Cells(hh,m).Value Thenrg = Ws.Range(Ws.Cells(hh,m),Ws.Cells(n-1,m))If m = ksl Thenrg.Mergerg.VerticalAlignment = MSExcel.Constants.xlCenterhh = nElseif Ws.Cells(n,m-1).Value = Ws.Cells(hh,m-1).Value Thenrg.Mergerg.VerticalAlignment = MSExcel.Constants.xlCenterhh = nEnd IfEnd IfNextNextEnd IfEnd If'设置每个数据系列Dim czb As String = e.Form.Controls("CheckedComboBox3").ValueDim czbs As New List(Of String) '次坐标轴集合If czb > "" Thenczbs.AddRange(czb.Split(","))End IfDim s As MSExcel.SeriesDim ys As Integer = 15 '颜色序号从15开始For n As Integer = 1 To cs.LengthIf e.Form.Controls("ComboBox2").Value.Contains("饼图") ThenIf n > 1 ThenExit ForEnd IfEnd Ifs = Cht.SeriesCollection(n)If x <> "" Thens.XValues = xbz '指定对应的x轴End If = cs(n-1).SubString(cs(n-1).LastIndexOf("】")+1) '系列名称If czbs.Contains(cs(n-1)) '如果在次坐标集合中找到对应的内容s.AxisGroup = 2End IfFunctions.Execute("App_Series","数据系列_" & ,Wb,s,ys+1,ys+2,ys+3)ys = ys+3Next'设置坐标轴If e.Form.Controls("ComboBox1").Value <> "饼图" ThenDim y1min,y1max,y2min,y2max As Integer '设置刻度If czb > "" Then '如果有主轴和次轴就要分别设置ar = ""Dim br As StringDim lst1() As String = e.Form.Controls("ListBox1").Combolist.Split(Chr(13)) Dim lst2() As String = e.Form.Controls("ListBox2").Combolist.Split(Chr(13)) For Each c As String In lst1lh = c.SubString(1,stIndexOf("】")-1)ar = ar & "," & Functions.Execute("App_ColChr",lh) & first & ":" & Functions.Execute("App_ColChr",lh) & lastNextFor Each c As String In lst2lh = c.SubString(1,stIndexOf("】")-1)br = br & "," & Functions.Execute("App_ColChr",lh) & first & ":" & Functions.Execute("App_ColChr",lh) & lastNextrg = Ws.Range(ar.Trim(","))y1min = App.WorksheetFunction.Min(rg)y1max = App.WorksheetFunction.Max(rg)With Cht.Axes(MSExcel.XlAxisType.xlValue).MinimumScale = y1min.MaximumScale = y1maxEnd Withrg = Ws.Range(br.Trim(","))y2min = App.WorksheetFunction.Min(rg)y2max = App.WorksheetFunction.Max(rg)With Cht.Axes(MSExcel.XlAxisType.xlValue,2).MinimumScale = y2min.MaximumScale = y2maxEnd WithElse '否则只要设置主轴刻度y1min = App.WorksheetFunction.Min(Ws.Range(ar))y1max = App.WorksheetFunction.Max(Ws.Range(ar))With Cht.Axes(MSExcel.XlAxisType.xlValue).MinimumScale = y1min.MaximumScale = y1maxEnd WithEnd IfIf e.Form.Controls("CheckBox11").Checked And e.Form.Controls("TextBox3").Value <> "" Then With Cht.Axes(MSExcel.XlAxisType.xlCategory) '设置X轴标题网格.HasTitle = True.AxisTitle.Text = e.Form.Controls("TextBox3").Value.HasMajorGridlines = e.Form.Controls("CheckBox12").Checked.HasMinorGridlines = e.Form.Controls("CheckBox13").CheckedEnd WithEnd IfIf e.Form.Controls("CheckBox6").Checked And e.Form.Controls("TextBox1").Value <> "" ThenWith Cht.Axes(MSExcel.XlAxisType.xlValue,1) '设置Y主轴标题网格.HasTitle = True.AxisTitle.Text = e.Form.Controls("TextBox1").Value.HasMajorGridlines = e.Form.Controls("CheckBox7").Checked.HasMinorGridlines = e.Form.Controls("CheckBox8").CheckedEnd WithEnd IfIf e.Form.Controls("CheckBox9").Enabled And e.Form.Controls("CheckBox9").Checked Ande.Form.Controls("TextBox2").Value <> "" ThenWith Cht.Axes(MSExcel.XlAxisType.xlValue,2) '设置Y次轴标题网格.HasTitle = True.AxisTitle.Text = e.Form.Controls("TextBox2").ValueEnd WithEnd IfEnd If'图例Dim sfxs As Boolean = e.Form.Controls("CheckBox3").CheckedCht.HasLegend = sfxsIf sfxs ThenFunctions.Execute("App_Wgsz","图例",Wb,Cht,7,8,9)End If'标题sfxs = e.Form.Controls("CheckBox4").CheckedCht.HasTitle = sfxsIf sfxs ThenFunctions.Execute("App_Wgsz","标题",Wb,Cht,10,11,12)End If'显示表格sfxs = e.Form.Controls("CheckBox14").CheckedCht.Hasdatatable = sfxsApp.Visible = True图表设置_Button6_ClickDim cb As WinForm.CheckedComboBox = e.Form.Controls("CheckedComboBox3")Dim tblx As String = e.Form.Controls("ComboBox2").ValueIf tblx.Contains("三维") Or tblx.Contains("饼图") Or tblx.Contains("圆柱") Or tblx.Contains("圆锥") Or tblx.Contains("棱锥") Thencb.Enabled = Falsecb.Value = ""Elsecb.Enabled = TrueEnd If'数据系列Dim z As String = e.Form.Controls("CheckedComboBox1").ValueDim zs As String()If z > "" Thenzs = z.Split(",")If zs.Length > 1 ThenboList = z.Replace(",","|")Elsecb.Value = ""End IfElsecb.Value = ""End IfDim c As String = cb.ValueIf c > "" Thene.Form.Controls("CheckBox9").Enabled = Truezs = z.Split(",") '所有数据列集合Dim zls As New List(Of String)zls.AddRange(zs)Dim cs As String() = c.Split(",") '次轴数据列集合Dim cls As New List(Of String)cls.AddRange(cs)For i As Integer = 0 To cls.Count - 1Dim va As String = cls(i)If zls.Contains(va) Thenzls.Remove(va)Elsecls.Remove(va)End IfNextDim zxx As StringIf zls.Count > 0 ThenFor Each cn As String In zlszxx = zxx & "|" & cnNextzxx = zxx.Trim("|")End Ife.Form.Controls("ListBox1").ComboList = zxxzxx = ""If cls.Count > 0 ThenFor Each cn As String In clszxx = zxx & "|" & cnNextzxx = zxx.Trim("|")End Ife.Form.Controls("ListBox2").ComboList = zxxElseIf z > "" Thene.Form.Controls("ListBox1").ComboList = z.Replace(",","|") End Ife.Form.Controls("ListBox2").ComboList = ""e.Form.Controls("CheckBox9").Enabled = FalseEnd If图表设置_Button7_Clicke.Form.Close图表设置_CheckBox11_CheckedChangede.Form.Controls("TextBox3").Enabled = e.Sender.Checkede.Form.Controls("CheckBox12").Enabled = e.Sender.Checkede.Form.Controls("CheckBox13").Enabled = e.Sender.Checked图表设置_CheckBox3_CheckedChangede.Form.Controls("Button3").Enabled = e.Sender.Checked图表设置_CheckBox4_CheckedChangede.Form.Controls("Button4").Enabled = e.Sender.Checked图表设置_CheckBox6_CheckedChangede.Form.Controls("TextBox1").Enabled = e.Sender.Checkede.Form.Controls("CheckBox7").Enabled = e.Sender.Checkede.Form.Controls("CheckBox8").Enabled = e.Sender.Checked图表设置_CheckBox9_CheckedChangede.Form.Controls("TextBox2").Enabled = e.Sender.Checked图表设置_CheckedComboBox1_TextChangede.Form.Controls("Button6").PerformClick图表设置_CheckedComboBox2_TextChangedDim cb As WinForm.CheckBox = e.Form.Controls("CheckBox5")cb.Enabled = Falsecb.Checked = FalseDim xx As String = e.Sender.ValueIf xx <> "" Thencb.Enabled = Truecb.Checked = TrueEnd If图表设置_CheckedComboBox3_TextChangede.Form.Controls("Button6").PerformClick图表设置_ComboBox1_ValueChangedDim lst As String = Functions.Execute("App_Charts",e.Sender.Value) e.Form.Controls("ComboBox2").ComboList = lstDim lsts As String() = lst.Split("|")e.Form.Controls("ComboBox2").Value = lsts(0)图表设置_ComboBox2_ValueChangede.Form.Controls("Button6").PerformClick图表设置_ListBox1_DoubleClickDim v As String = e.Sender.ValueIf v > "" Thenv = v.SubString(v.IndexOf("】")+1)exStr = "Z数据系列_" & vForms("图表数据系列").OpenEnd If图表设置_ListBox2_DoubleClickDim v As String = e.Sender.ValueIf v > "" Thenv = v.SubString(v.IndexOf("】")+1)exStr = "C数据系列_" & vForms("图表数据系列").OpenEnd If图表数据系列_AfterLoadDim lx As String = exStrIf lx.SubString(0,1) = "Z" Then '如果是主轴的数据系列,不允许设置类型e.Form.Controls("GroupBox1").Enabled = FalseIf Forms("图表设置").Controls("ComboBox1").Value = "饼图" Thene.Form.Controls("CheckBox3").Enabled = TrueEnd IfEnd Iflx = lx.SubString(lx.IndexOf("_")+1)e.Form.Text = "数据系列【" & lx & "】格式设置"Dim f As String = ProjectPath & "Net\Chart\数据系列_" & lx & ".txt"If FileSys.FileExists(f) ThenDim vs As String() = FileSys.ReadAllText(f).Split("ㄉ")Dim v As String = vs(1)vs = v.Split(",")'系列名称e.Form.Controls("TextBox1").Value = vs(0)'图表类型Dim lxs As String() = Functions.Execute("App_ChartNum",vs(1)).Split(",")e.Form.Controls("ComboBox1").Value = lxs(0)e.Form.Controls("ComboBox2").Value = lxs(1)'数据标签e.Form.Controls("CheckBox1").Checked = vs(2)e.Form.Controls("CheckBox2").Checked = vs(3)e.Form.Controls("CheckBox3").Checked = vs(4)'分色显示e.Form.Controls("CheckBox4").Checked = vs(5)Elsee.Form.Controls("TextBox1").Value = lxEnd IfIf e.Form.Controls("CheckBox3").Enabled = False Thene.Form.Controls("CheckBox3").Checked = FalseEnd If图表数据系列_Button1_ClickForms("图表外观").Open图表数据系列_Button2_ClickDim xlmc As String = e.Form.Controls("TextBox1").ValueIf xlmc = "" ThenMessageBox.Show("数据系列名称不能为空! ","信息提示",MessageBoxButtons.OK,MessageBoxIcon.Warning)ReturnElseif xlmc.Contains(",") ThenMessageBox.Show("数据系列名称中不能包含半角逗号! ","信息提示",MessageBoxButtons.OK,MessageBoxIcon.Warning)ReturnEnd IfDim tblx As Integer =Functions.Execute("App_ChartType",e.Form.Controls("ComboBox1").Value,e.Form.Controls("ComboBox2" ).Value)Dim flmc As Boolean = e.Form.Controls("CheckBox1").CheckedDim sz As Boolean = e.Form.Controls("CheckBox2").CheckedDim bfb As Boolean = e.Form.Controls("CheckBox3").CheckedDim fs As Boolean = e.Form.Controls("CheckBox4").Checked'保存设置Dim str As String = xlmc & "," & tblx & "," & flmc & "," & sz & "," & bfb & "," & fsDim f As String = ProjectPath & "Net\Chart\" & exStr.SubString(1) & ".txt" '保存文件名If Not FileSys.FileExists(f) ThenIf Not FileSys.DirectoryExists(ProjectPath & "Net\Chart") ThenFileSys.CreateDirectory(ProjectPath & "Net\Chart")End Ifstr = "宋体,0,9,0,0,0,0,0,0,0,3,255,255,255,False,True,4,False,13,False,,,靠右ㄉ" & str ElseDim vs As String() = FileSys.ReadAllText(f).Split("ㄉ")Dim qtz As String = vs(0)str = qtz & "ㄉ" & strEnd IfFileSys.WriteAllText(f,str,False)e.Form.Close图表数据系列_Button3_Clicke.Form.Close图表数据系列_ComboBox1_ValueChangedDim lst As String = Functions.Execute("App_Charts",e.Sender.Value)Dim lsts As String() = lst.Split("|")lst = ""For Each l As String In lstsIf Not l.Contains("三维") Thenlst = lst & "|" & lEnd IfNextlst = lst.Trim("|")e.Form.Controls("ComboBox2").ComboList = lstlsts = lst.Split("|")e.Form.Controls("ComboBox2").Value = lsts(0)图表外观_AfterLoadDim lx As String = exStre.Form.Text = "【" & lx & "】项目设置"If lx.Contains("数据系列") Thene.Form.Text = "【" & lx.SubString(lx.IndexOf("_")+1) & "】项目设置"lx = lx.SubString(1)End IfIf lx = "绘图区" Thene.Form.Controls("GroupBox3").Enabled = FalseEnd IfIf lx <> "标题" Thene.Form.Controls("GroupBox4").Enabled = FalseEnd IfIf lx <> "图例" Thene.Form.Controls("GroupBox5").Enabled = FalseEnd IfDim f As String = ProjectPath & "Net\Chart\" & lx & ".txt"If FileSys.FileExists(f) ThenDim vs As String() = FileSys.ReadAllText(f).Split(",")If lx.Contains("数据系列") Thenvs = FileSys.ReadAllText(f).Split("ㄉ")Dim szz As String = vs(0)vs = szz.Split(",")End If'字体Dim zt1 As String = vs(0)Dim zt2 As FontStyle = vs(1)Dim zt3 As Integer = vs(2)e.Form.Controls("TextBox1").Font = New Font(zt1,zt3,zt2)e.Form.Controls("TextBox1").ForeColor = Color.FromARGB(vs(3),vs(4),vs(5))'边框样式Dim ss As String() = e.Form.Controls("ComboBox1").ComboList.Split(Chr(13))e.Form.Controls("ComboBox1").Value = ss(vs(6))'边框颜色e.Form.Controls("ColorLabel1").BackColor = Color.FromARGB(vs(7),vs(8),vs(9))'边框粗细ss = e.Form.Controls("ComboBox2").ComboList.Split(Chr(13))e.Form.Controls("ComboBox2").Value = ss(vs(10)-1)'填充颜色e.Form.Controls("ColorLabel2").BackColor = Color.FromARGB(vs(11),vs(12),vs(13)) '是否启用填充效果e.Form.Controls("CheckBox1").Checked = vs(14)'渐变方向e.Form.Controls("RadioButton1").Checked = vs(15)ss = e.Form.Controls("ComboBox3").ComboList.Split(Chr(13))If vs(16) = 7 Thene.Form.Controls("ComboBox3").Value = "中心辐射"Elsee.Form.Controls("ComboBox3").Value = ss(vs(16)-1)End If'纹理图案e.Form.Controls("RadioButton2").Checked = vs(17)ss = e.Form.Controls("ComboBox4").ComboList.Split(Chr(13)) e.Form.Controls("ComboBox4").Value = ss(vs(18)-1)'背景图片e.Form.Controls("RadioButton3").Checked = vs(19)e.Form.Controls("TextBox2").Value = vs(20)'标题e.Form.Controls("TextBox3").Value = vs(21)'图例e.Form.Controls("ComboBox5").Value = vs(22)End If图表外观_Button1_Clicke.Form.Close图表外观_Button2_ClickDim s As New Windows.Forms.FontDialogs.ShowColor = Trues.Font = e.Form.Controls("TextBox1").Fonts.Color = e.Form.Controls("TextBox1").ForeColorIf s.ShowDialog = DialogResult.OK Thene.Form.Controls("TextBox1").Font = s.Fonte.Form.Controls("TextBox1").ForeColor = s.ColorEnd If图表外观_Button4_ClickDim style,weight,gradient,texture As IntegerDim r1,g1,b1,r2,g2,b2,r3,g3,b3 As Integer'字体设置Dim fn As String = e.Form.Controls("TextBox1")Dim fs As Integer = e.Form.Controls("TextBox1").Font.Style Dim fsize As Integer = e.Form.Controls("TextBox1").Font.Size Dim RGBColor As Color = e.Form.Controls("TextBox1").ForeColor r1 = RGBColor.Rg1 = RGBColor.Gb1 = RGBColor.B'边框样式Select e.Form.Controls("ComboBox1").ValueCase "无"style = 0Case "实线"style = 1Case "不连续线"style = 2Case "单点连续线"style = 3Case "单点单线结合"Case "双点单线结合"style = 5End Select'边框颜色RGBColor = e.Form.Controls("ColorLabel1").BackColor r2 = RGBColor.Rg2 = RGBColor.Gb2 = RGBColor.B'边框粗细Select e.Form.Controls("ComboBox2").ValueCase "最细"weight = 1Case "细"weight = 2Case "中等"weight = 3Case "粗"weight = 4End Select'填充颜色RGBColor = e.Form.Controls("ColorLabel2").BackColor r3 = RGBColor.Rg3 = RGBColor.Gb3 = RGBColor.B'渐变方向Select e.Form.Controls("ComboBox3").ValueCase "水平"gradient = 1Case "垂直"gradient = 2Case "斜上"gradient = 3Case "斜下"gradient = 4Case "角部辐射"gradient = 5Case "中心辐射"gradient = 7End Select'纹理图案Select e.Form.Controls("ComboBox4").ValueCase "纸莎草纸"texture = 1Case "画布"texture = 2Case "斜纹布"texture = 3Case "编织物"texture = 4Case "水滴"texture = 5Case "纸袋"texture = 6Case "鱼类化石"Case "沙滩"texture = 8Case "绿色大理石"texture = 9Case "白色大理石"texture = 10Case "褐色大理石"texture = 11Case "花岗岩"texture = 12Case "新闻纸"texture = 13Case "再生纸"texture = 14Case "羊皮纸"texture = 15Case "信纸"texture = 16Case "蓝色面巾纸"texture = 17Case "粉色面巾纸"texture = 18Case "紫色网格"texture = 19Case "花束"texture = 20Case "软木塞"texture = 21Case "胡桃"texture = 22Case "栎木"texture = 23Case "深色木质"texture = 24End Select'其它设置Dim sfxg As Boolean = e.Form.Controls("CheckBox1").CheckedDim rd1 As Boolean = e.Form.Controls("RadioButton1").CheckedDim rd2 As Boolean = e.Form.Controls("RadioButton2").CheckedDim rd3 As Boolean = e.Form.Controls("RadioButton3").CheckedDim f As String = e.Form.Controls("TextBox2").ValueDim bt As String = e.Form.Controls("TextBox3").ValueDim wz As String = e.Form.Controls("ComboBox5").Value'保存设置Dim str As String = fn & "," & fs & "," & fsize & "," & r1 & "," & g1 & "," & b1 & _"," & style & "," & r2 & "," & g2 & "," & b2 & "," & weight & _"," & r3 & "," & g3 & "," & b3 & "," & sfxg & _"," & rd1 & "," & gradient & "," & rd2 & "," & texture & "," & rd3 & "," & f & "," & bt & "," & wz f = ProjectPath & "Net\Chart" '检查路径是否存在If Not FileSys.DirectoryExists(f) ThenFileSys.CreateDirectory(f)End IfDim lx As String = exStrf = f & "\" & lx & ".txt" '保存文件名If lx.Contains("数据系列") Thenf = f.Replace(lx,lx.SubString(1))str = str & "ㄉ"If FileSys.FileExists(f) ThenDim vs As String() = FileSys.ReadAllText(f).Split("ㄉ") Dim qtz As String = vs(1)str = str & qtzEnd IfEnd IfFileSys.WriteAllText(f,str,False)e.Form.Close图表外观_CheckBox1_CheckedChangede.Form.Controls("GroupBox2").Enabled = e.Sender.Checked图表外观_RadioButton1_CheckedChangede.Form.Controls("ComboBox3").Enabled = e.Sender.Checked图表外观_RadioButton2_CheckedChangede.Form.Controls("ComboBox4").Enabled = e.Sender.Checked图表外观_RadioButton3_CheckedChangede.Form.Controls("TextBox1").Enabled = e.Sender.Checked图表外观_TextBox2_DoubleClickDim f As New OpenFileDialogf.Filter= "图片文件|*.jpg;*.bmp;*.gif"If f.ShowDialog = DialogResult.Ok Thene.Form.Controls("TextBox1").Value =f.FileNameEnd If自定义函数App_ChartNumDim tblx As StringSelect Case Args(0)Case 51tblx = "柱形图,簇状柱形图"Case 52tblx = "柱形图,堆积柱形图"Case 53tblx = "柱形图,百分比堆积柱形图"Case 57tblx = "条形图,簇状条形图"Case 58tblx = "条形图,堆积条形图"Case 59tblx = "条形图,百分比堆积条形图"Case 4tblx = "折线图,折线图"Case 65tblx = "折线图,数据点折线图"Case 63tblx = "折线图,堆积折线图"Case 66tblx = "折线图,堆积数据点折线图"Case 64tblx = "折线图,百分比堆积折线图"Case 67tblx = "折线图,百分比堆积数据点折线图"Case 1tblx = "面积图,面积图"Case 76tblx = "面积图,堆积面积图"Case 77tblx = "面积图,百分比堆积面积图"End SelectReturn tblxApp_ChartsDim lst As StringSelect Case Args(0)Case "柱形图"lst = "簇状柱形图|三维簇状柱形图|堆积柱形图|三维堆积柱形图|百分比堆积柱形图|三维百分比堆积柱形图|三维柱形图"Case "条形图"lst = "簇状条形图|三维簇状条形图|堆积条形图|三维堆积条形图|百分比堆积条形图|三维百分比堆积条形图"Case "折线图"lst = "折线图|数据点折线图|堆积折线图|堆积数据点折线图|百分比堆积折线图|百分比堆积数据点折线图|三维折线图"Case "饼图"lst = "饼图|分离型饼图|三维饼图|三维分离型饼图|复合饼图|复合条饼图"Case "面积图"lst = "面积图|三维面积图|堆积面积图|三维堆积面积图|百分比堆积面积图|三维百分比堆积面积图" Case "圆柱图"lst = "柱形圆柱图|条形圆柱图|堆积柱形圆柱图|堆积条形圆柱图|百分比堆积柱形圆柱图|百分比堆积条形圆柱图|三维柱形圆柱图"Case "圆锥图"lst = "柱形圆锥图|条形圆锥图|堆积柱形圆锥图|堆积条形圆锥图|百分比堆积柱形圆锥图|百分比堆积条形圆锥图|三维柱形圆锥图"Case "棱锥图"lst = "柱形棱锥图|条形棱锥图|堆积柱形棱锥图|堆积条形棱锥图|百分比堆积柱形棱锥图|百分比堆积条形棱锥图|三维柱形棱锥图"End SelectReturn lstApp_ChartTypeDim tblx As IntegerSelect Case Args(0)Case "柱形图"Select Case Args(1)Case "簇状柱形图"tblx = 51Case "三维簇状柱形图"tblx = 54Case "堆积柱形图"tblx = 52Case "三维堆积柱形图"tblx = 55Case "百分比堆积柱形图"tblx = 53Case "三维百分比堆积柱形图" tblx = 56Case "三维柱形图"tblx = -4100End SelectCase "条形图"Select Case Args(1)Case "簇状条形图"tblx = 57Case "三维簇状条形图"tblx = 60Case "堆积条形图"tblx = 58Case "三维堆积条形图"tblx = 61Case "百分比堆积条形图"tblx = 59Case "三维百分比堆积条形图" tblx = 62End SelectCase "折线图"Select Case Args(1)Case "折线图"tblx = 4Case "数据点折线图"tblx = 65Case "堆积折线图"tblx = 63Case "堆积数据点折线图"tblx = 66Case "百分比堆积折线图"tblx = 64Case "百分比堆积数据点折线图" tblx = 67Case "三维折线图"tblx = -4101End SelectCase "饼图"Select Case Args(1)Case "饼图"tblx = 5Case "分离型饼图"tblx = 69Case "三维饼图"tblx = -4102。
菜鸟也能用foxtable开发自己的应用程序整理篇
菜鸟也能用foxtable开发自己的应用程序整理篇(word版本)第一部分所需要的文件及讲解提纲1.创建我们的第一张表——会员表表结构如下图:同时设置字段的类型,其他的暂时不要考虑;2.分析我们的第一张表,看看是否有什么事件会发生?可以按照以下的思路去分析这样,一个一个部分的来做1)增加的时候是否有什么动作发生?当添加一个新会员的时候,各个字段的状态会员卡号,默认为会员编号;会员等级,默认为普通;卡片状态,默认为正常;过期时间,默认为今天+一年;卡片余额,默认为0;积分数量,默认为0;折扣字段怎么操作呢?这些分析完毕之后,想想怎么达成你的目的呢?既然是新增的时候发生的事情,那么就找到表事件当我们点击datarowadding的时候,就会看到帮助的动态提示DataRowAdding增加一行时执行,此时新增行(DataRow)已经创建,但并未真正增加到DataTable中,通常在此处对新增行进行默认值的设置。
e参数属性:DataTable:返回增加行的数据表。
DataRow:返回新增加的行。
示例一例如希望新增行的日期设为当前系统日期,姓名设为当前登录用户名,可以将事件的代码设置为:e.DataRow("日期") =Date.Today()e.DataRow("姓名") = 有了这个提示,以上的内容是不是就迎刃而解了呢?是不是觉得其实弄这个也挺简单的嘛!代码如下:e.DataRow("会员等级") = "普通"e.DataRow("会员卡状态")= "正常"e.DataRow("登记时间")= Date.todaye.DataRow("过期日期") = e.DataRow("登记时间").AddDays(365)e.DataRow("卡片余额") = 0e.DataRow("会员积分") = 0这里面仅有一个地方需要解释一下e.DataRow("过期日期") = e.DataRow("登记时间").AddDays(365)这里是什么意思呢?过期日期是需要自动填充的,什么时候呢?是登记日期后的365天,那么我们怎么获得这个addday呢?e.DataRow("登记时间")= Date.today后面点一个·,按tab立即就出来帮助了这个是不是很方便这个部分介绍一下修改的时候发生的事情,以及如何解决1.进入单元格的时候希望通过窗口操作,其他操作一律取消;2.双击单元格,打开一个窗口默认情况下激活编辑功能,一旦编辑功能受限,那么激活doubleclick功能3.希望此表作为副本表或者其他表的时候,怎么双击都可以弹出一个窗口;我们查看一下表的属性,观察事件这些事件,主要涉及的是编辑的控制,我们需要的是双击单元格的时候,取消其默认的编辑功能,同时打开某个窗口。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据绑定最简单的绑定首先还是打开我们的示例文件“专业报表.Table”,然后在命令窗口执行下面的代码:Dim doc As New PrintDocDim rt As New prt.RenderTextrt.DataBinding.DataSource = BindTables("订单") '将rt绑定到订单表rt.Text= "[Fields!产品.Value]" '设置打印字段doc.body.Children.Add(rt)doc.Preview()上述代码会打印出订单表中每一行的产品名称。
DataBinding用于设置打印对象的绑定属性,该属性包括一些子属性,DataSource表示数据来源,数据来源可以是Table,还可以是数组或者集合。
需要注意的是,不能直接绑定到Table,如果要绑定到Table,必须用BindTables来设置,例如:rt.DataBinding.DataSource = BindTables("订单")如果对象的内容来自于某一列,其Text属性的设置格式如下:[Fields!列名称.Value]使用表达式在命令窗口执行下面的代码:Dim doc As New PrintDocDim rt As New prt.RenderTextrt.DataBinding.DataSource = BindTables("订单") '将rt绑定到订单表rt.Text= "[Math.Round(Fields!金额.V alue,1)]" '设置打印表达式doc.body.Children.Add(rt)doc.Preview()留意方括号中的内容:Math.Round(Fields!金额.Value,1)意思是打印的时候将金额列的内容,保留一位小数,你可以在Text属性中使用Foxtable支持的所有函数。
注意表达式必须用方括号括起来。
日期的打印为了得到常规的日期格式,可以利用Format格式化日期数据:Dim doc As New PrintDocDim rt As New prt.RenderTextrt.DataBinding.DataSource = BindTables("订单") '将rt绑定到订单表rt.Text= "[Format(Fields!日期.Value,""yyyy-MM-dd"")]"doc.body.Children.Add(rt)doc.Preview()要记得对于字符串中的每一个双引号,都必须用两个双引号来表示。
在命令窗口执行下面的代码:绑定多个字段为了打印出订单表中的日期和数量,在命令窗口执行下面的代码:需要使用容器(RenderArea),将原来的打印对象加入到容器中,这些打印对象不再需要设置绑定,只需为容器设置绑定即可。
例如:Dim doc As New PrintDocDim rt As New prt.RenderTextDim ra As New prt.RenderAreara.Style.Spacing.Bottom = 2ra.DataBinding.DataSource = BindTables("订单") '将容器绑定到订单表rt.Text = "[Fields!日期.Value]"ra.Children.Add(rt) '将打印对象添加到容器中rt = New prt.RenderTextrt.Text= "[Fields!数量.Value]"ra.Children.Add(rt)doc.body.Children.Add(ra)doc.Preview()上述的代码将依次打印每一个订单的日期和数量。
打印标签有了绑定,打印标签比以前更简单。
示例Dim doc As New PrintDoc '定义一个报表Doc.Stacking = prt.StackingRulesEnum.InlineLeftToRightDim ra As New prt.RenderAreaDim rt As prt.RenderTextra.Width = 40 '设置标签宽度ra.SplitHorzBehavior = prt.SplitBehaviorEnum.Never '禁止水平分割ra.SplitVertBehavior = prt.SplitBehaviorEnum.Never '禁止垂直分割ra.Style.Spacing.Right = 2 '设置标签之间的所有和上下间隔为2毫米ra.Style.Spacing.Bottom = 2ra.Style.Padding.All = 1 ' 标签内容距离边框为1毫米ra.Style.Borders.All = New prt.Linedef(0.3, Color.Red) '设置边框ra.DataBinding.DataSource = BindTables("员工") '将容器绑定到员工表Doc.Body.ChildRen.Add(ra) '将容器加入到报表中rt = New prt.RenderTextrt.Text = "姓名:[Fields!姓名.Value]"ra.Children.Add(rt) '添加到容器中rt = New prt.RenderTextrt.Text = "部门:[Fields!部门.Value]"ra.Children.Add(rt) '添加到容器中rt = New prt.RenderTextrt.Text = "职务:[Fields!职务.Value]"ra.Children.Add(rt) '添加到容器中Doc.Preview() '预览报表表格与绑定行组也可以设置绑定,这样我们可以很方便地将一个表格绑定到数据表。
例如,打印订单表中的某些列,代码非常简单:Dim doc As New PrintDocDim rt As New prt.RenderTableDim tb as Table = Tables("订单")Dim ColNames As String() = New String(){"产品", "客户","单价", "数量", "金额"}For c As integer = 0 To ColNames.Length -1rt.Cells(0,c).Text = ColNames(c)rt.Cols(c).Width = tb.Cols(ColNames(c)).PrintWidthrt.Cells(1, c).Text = "[Fields!" & ColNames(c) & ".Value]" '设置绑定表达式Nextrt.RowGroups(0,1).Style.TextAlignVert = prt.AlignVertEnum.Center '第一行内容垂直居中rt.RowGroups(0,1).Header = prt.TableHeaderEnum.All '将第一行作为表头。
rt.RowGroups(1,1).DataBinding.DataSource = BindTables("订单") '将第二行绑定到订单表doc.Body.Children.Add(rt)doc.Preview()注意这一行代码:rt.RowGroups(1,1).DataBinding.DataSource = BindTables("订单") '将第二行绑定到订单表该行代码将表格的第二行绑定到订单表,这样第二行将根据订单表中的每一行数据,自动生成副本,完成整个表格的打印。
FOXtable编程基本概念DataTable和TableFoxtable中有一个集合DataTables,通过该集合可以获得指定名称的表,例如:DataTables("产品") '产品表DataTables("客户") '客户表DataTables("订单") '订单表实际上你是看不到DataTable的,你看到的是Table,也就是说,上面的三个图,实际上就是三个Table。
那么什么是Table呢?你可以这样理解,DataTable就像一个仓库,所有从数据文件中加载的数据,都存放在这里,而且这个仓库是不直接面对用户的;而Table就像一个展厅,是负责和用户打交道的,这个展厅(Table)从仓库(DataTable)中取得数据,并呈现给用户。
同样,Foxtable中也有一个集合Tables,通过该集合可以获得指定名称的Table,在没有建立关联的情况下,我们这个简化的订单管理系统包括三个Table,分别是:Tables("客户")Tables("订单")在初始的情况下,Table会从DataTable中提取所有数据呈现给用户,如果你设置了筛选条件,Table就会从DataTable提取符合筛选条件的数据,然后呈现给用户。
例如订单表有1000行数据,那么DataTables("订单")从头到尾,始终都会有1000行数据,不受筛选的影响。
而Tables("订单")却不一样,如果没有进行筛选,那么Tables("订单")也会包括所有数据,也就是1000行数据全部可见。
如果现在从中筛选出产品为PD01的订单,且PD01的订单是200个,那么经过筛选后,Tables("订单")会包括200行数据,也就是你看到的那200个产品为PD01的订单。
所以关于DataTable和Table的关系,较为完整的描述是:从数据文件加载到Foxtable中的数据,是存放在DataTable中的,它就像一个仓库,不直接面对用户;而Table就像一个展厅,是负责和用户打交道的,它根据指令从仓库(DataTable)中提取符合条件的数据,然后呈现给用户;通过菜单进行的日常数据管理工作,例如增加行、删除行、排序、筛选、汇总等等,都是在Table中进行的;除了编程,用户没有办法直接对DataTable进行操作,因为它是不可见的。