




已阅读5页,还剩120页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于VISUALC 和ARCENGINE的二次开发 系统功能需求 前面已经通过C 和AE搭建了一个简单的系统框架 这里进一步介绍一些具体功能的实现 以丰富完善系统 我们先完善系统的数据查询功能 包括单表查询 多表连接查询以及查询结果输出显示 无论是单表还是多表查询 其最终查询结果都需要在查询结果窗口中显示 系统数据查询功能实现 简单Access数据库的建立单表查询功能的实现多表连接查询功能的实现小结 一 简单Access数据库的建立 步骤1 打开Access数据库 这里是使用的是Access2007 Access2003与Access2007有所不同 新建一个名为Database的空白数据库 注意这里要设置数据库为 mdb格式 方便后续数据库与C 的连接工作 步骤2 在新建的数据库中导入已有的Excel外部数据 1 点击外部数据 Excel菜单 打开相应对话框 找到Excel表格数据所在路径 再点击 确定 按钮 进入 导入数据表向导 对话框 单击该按钮 2 在 导入数据表向导 对话框中按下列图设置相关参数 当添加的数据中列名有重复时 会弹出提醒对话框 最好在导入前先确保数据表中数据列名无重复 弹出对话框时 直接点击 确定 按钮即可 导入G101表后 在Access数据库中打开该表 并通过右侧滚动条拖动到数据最后一行 发现在 前面还有一行空白数据 这就是前面弹出警告对话框的原因 有时这一空白行也位于数据中间 需细心删除 对照Access数据库与原始Excel表中G101数据的每一列的字段名 发现原始Excel表中为 的标志在Access数据库中变成了 这是因为Access数据库在导入数据时不支持 符号 此时系统就会自动将其转换成Access能识别的符号 变成了 空白行所在处 步骤3 用同样的方法导入G102和G103表 至此名为Database的小型Access数据库就建立完成了 二 单表查询 1新建基表查询窗体 并添加控件 因为本次查询主要是以污染源数据为基础 在污染源查询中 基表查询就是一个典型的单表查询 所以这里可以修改前面框架中数据查询的下级菜单中的单表查询为基表查询 同理修改多表查询为组合查询 步骤1 在项目菜单项中单击添加Windows窗体菜单 打开相应对话框 步骤2 在打开的窗口中 先单击选中类别框中的VisualC 项目项 并在其展开的模板框中选中 Windows窗体 图标名称默认 也可以自行修改 最后点击 添加 按钮 这样一个新的窗体就建成了 步骤3 为新建的Form2窗体添加控件 1 修改窗体名称并适当拉动窗口 调整其大小 2 添加label控件 并修改其text属性 所有可用控件都在工具箱中 工具箱 若未显示可以从视图菜单中找到该菜单项 3 添加comboBox控件 并修改其Name属性为comboType 这样命名是为了方便后续的事件响应时 能清楚地知道该控件应该实现的功能 4 添加两个radioButton控件 前者修改其Text属性为 重点污染源 name属性为 radioZhongdian 后者则修改其Text属性为 一般污染源 name属性为 radioYiban 5 添加两个GroupBox控件 并分别修改其text属性改为 选择基表 选择指标 将其text属性分别改为 选择基表 选择指标 6 添加两个listbox控件 并分别修改其Name属性为listBoxJibiao listBoxZhibiao 同理修改其Name属性 7 添加一个Button按钮 修改其Text属性为 查询 修改其Name属性为 btnStart 至此 一个简单的单表查询窗口所需功能控件就添加完成了 同理修改其Text属性 2基表查询窗体和主窗体的连接 为了能显示基表查询窗口 我们需要将其与主窗口连接起来 步骤1 在Form1设计主窗口中 双击 基表查询 菜单 由先前的单表查询 多表查询修改为基表查询 组合查询 双击该按钮 响应相应事件 步骤2 在响应的Click事件中 添加相关代码 privatevoid基表查ToolStripMenuItem Click objectsender EventArgse Form2form newForm2 Form2窗口即为我们设计的基表查询窗口 new用于申明一个Form2窗口的实例form Show 将该窗口实例显示出来 步骤3 运行程序 单击数据查询菜单中的基表查询菜单 即弹出前面建立的基表查询窗口 3为窗体中的控件添加事件处理3 1组件和控件的区别组件 在 NET框架中 组件是指实现System ComponentModel IComponent接口的一个类 或从实现IComponent的类中直接或间接导出的类 在编程中 组件 这个术语通常用于可重复使用并且可以和其他对象进行交互的对象 控件 控件是提供 或实现 用户界面 UI 功能的组件 NET框架为控件提供两个基类 一个用于我们将要探讨的窗体控件 另一个用于ASP NET服务器控件 它们分别是System Windows Forms Control和System Web UI Control NET框架类库中的所有控件都是直接或间接从这两个类导出的 System Windows Forms Control从Component导出 它本身提供UI功能 System Web UI Control实现IComponent 它还提供结构 在这个结构上可以很方便地添加UI功能 注意 每个控件都是一个组件 单并不是每个组件都是控件 3 2窗体中的事件事件可由用户操作 如单击鼠标或按某个键 程序代码或系统生成 事件驱动中的应用程序执行代码以响应事件 每个窗体和控件都公开一组预定义事件 可根据这些事件按进行编程 如果发生其中一个事件并且在相关联的事件处理程序中有代码 则调用代码 对象引发的事件类型会发生变化 但对大多数控件 很多类型是通用的 例如 大多数对象都处理Click事件 即如果用户单击窗体 将执行该窗体的Click事件处理程序中的代码 注意 很多事件与其他事件一起发生 例如 在发生DoubleClick事件的过程中 还发生MouseDown MouseUp和Click事件 3 3命名空间 NET框架类库由命名空间组成 每个命名空间都包含可在程序中使用的类型 类 结构 委托和接口 命名空间提供范围 两个同名的类只要位于不同的命名空间并且其名称符合命名空间的要求 就可以在程序中使用它们 默认情况下将创建一个跟项目同名的命名空间 项目中的所有类型都位于该命名控件下 不过在一个C 项目中定义多个命名控件是允许的 一个命名控件也可以定义多个子命名空间 NET框架中包含一些基本命名空间 如System Collections System Text等 如果你的类方法里面要引用 net类库里面的类或方法的 那么就需要在文件里面引用该类或类库的命名空间 3 4为基表查询窗体及其控件添加事件处理步骤1 在基表查询窗体中选中ComboBox控件 点击控件右上角按钮 在其展开的窗口中点击 编辑项 命令 打开 字符串集合编辑器 对话框 在该对话框中输入 工业污染源 农业污染源 生活污染源 集中式污染治理设施 等文本项 实现下拉列表框中文本的添加 点击此按钮 运行程序 组合框中已有输入的文本信息 步骤2 鉴于只有工业污染源有划分为重点污染源和一般污染源 这里先双击ComboBox按钮 响应组合框的SelectedIndexChanged 函数 并添加相关代码 privatevoidcomboType SelectedIndexChanged objectsender EventArgse if comboType SelectedItem ToString 工业污染源 radioZhongdian Visible true radioYiban Visible true 当选中组合框中 工业污染源 时 单选按钮 重点污染源 和 一般污染源 可视radioZhongdian Checked false radioYiban Checked false 确保 每次选中 工业污染源 时 该两个按钮处于未选中状态listBoxJibiao Items Clear listBoxZhibiao Items Clear 清空基表和指标列表中的项 elseif comboType SelectedItem ToString 农业污染源 radioZhongdian Visible false radioYiban Visible false 当选中组合框中 农业污染源 时 两个单选按钮都为不可视listBoxJibiao Items Clear listBoxZhibiao Items Clear 添加农业源的基表 elseif comboType SelectedItem ToString 生活污染源 radioZhongdian Visible false radioYiban Visible false listBoxJibiao Items Clear listBoxZhibiao Items Clear 添加生活源的基表 else radioZhongdian Visible false radioYiban Visible false listBoxJibiao Items Clear listBoxZhibiao Items Clear 添加集中式污染治理设施的基表 程序中 后或用 引起来的部分都是注释 有助于理解程序代码含义 运行程序 显示结果如下 选择农业污染源后 两个单选按钮不显示 步骤3 响应单选按钮 重点污染源 的CheckedChanged事件 在界面Form2 cs中系统自动生成的相关函数及需要添加的代码如下 privatevoidradioZhongdian CheckedChanged objectsender EventArgse listBoxJibiao Items Clear listBoxZhibiao Items Clear 添加工业源中的重点源有关的基表if radioZhongdian Checked true listBoxJibiao Items Add 工业企业基本情况 listBoxJibiao Items Add 主要产品 原辅材料及能源消费情况 listBoxJibiao Items Add 工业用水 排水情况 else 添加工业源中一般源有关的基表 由于本数据库中没有一般污染源 所以未添加也可以将这段代码用 引起来 以后有相关数据时再添加 运行程序 显示如下结果 选中重点污染源后 与重点污染源相关的基表信息显示在 选择基表 列表框中 在污染源类型还未选择前 重点污染源 和 一般污染源 两个单选按钮是可见而且是可选的 为了解决这一问题 可以直接在该两个单选控件的属性中修改Visible属性为 False 步骤4 建立数据库基表查询窗口与数据库的连接 因为在点击 选择基表 列表框中的基表后需要在相应的 选择指标 列表框中显示基表中指标 这个时候就需要建立与数据库的连接 建立连接要用到System Data OleDb命称空间中的类 OleDbConnection 所以在连接前先在Form2 cs窗口的开头添加命名空间 usingSystem Data OleDb OleDbConnection类 表示到数据源的连接是打开的 为了使用该类相关方法 需要申明一个类的对象 由于该类是实现基表查询窗口与数据库的连接 所以将其定义在该窗口类中 即在publicpartialclassForm2 Form中定义 响应Form2窗体的Load函数 添加相关代码如下 privateOleDbConnectionconn 申明OleDbConnection类的对象connprivatevoidForm2 Load objectsender EventArgse 建立与本地数据库的连接 conn newOleDbConnection Provider Microsoft Jet OLEDB 4 0 DataSource Application StartupPath Database mdb 其中 Provider 是表明数据库引擎的类型 DataSource 是指向的数据库名称 这里要建立与本地数据库的连接 必须将Database mdb置于项目工程的Debug目录下 如本例中放置在F myGIS bin Debug路径中 步骤5 响应基表列表框Click事件 读取基表中列名 显示在指标列表框中 点击该按钮 展开 NET框架中选中控件的预定义事件 双击Click右侧空白栏 响应Click事件 若要响应其他事件与该操作类似 添加相关代码如下 privateDataTabletable 申明一个数据表对象privatevoidlistBoxJibiao Click objectsender EventArgse 响应函数 响应事件是当用鼠标点击列表框中项时 执行下述操作 intcnt listBoxJibiao SelectedItems Count 获取列表框中项的总个数if cnt 0 当未选中任何项时 返回 return stringsql 定义一空字符串 用于SQL查询语句intindex index listBoxJibiao SelectedIndex 获取当前选定项的从零开始的索引 if comboType Text 工业污染源 elseif comboType Text 工业污染源 radioYiban Checked true 当有一般污染源数据信息时 可以在其中添加相应代码 listBoxZhibiao Items Clear 先清空conn Open 打开与数据库的连接OleDbCommandcmd newOleDbCommand sql conn 申明的OleDbCommand对象 表示要对数据源执行的SQL语句OleDbDataAdapteradp newOleDbDataAdapter cmd 表示数据命令和数据库的连接table newDataTable 申明一个数据表adp Fill table 将用SQL语句查询到的表中数据添加到新建的table中intcols table Columns Count 获取table中数据列数for inti 0 i cols i listBoxZhibiao Items Add table Columns i ToString 根据选择的基表 往指标列表框添加相应的指标名称 conn Close 关闭到数据源的连接 运行程序 显示结果如下 为了使指标列表框中指标可以复选 可以在该列表框中修改其SelectionMode属性为MultiExtended 步骤6 响应查询按钮的Click事件 为事件添加相关代码 实现查询功能 在Form2 cs 设计 窗口中双击基表查询窗体中的查询按钮即可 privatevoidbtnStart Click objectsender EventArgse if listBoxJibiao SelectedItems Count 0 MessageBox Show 请先选择要查询的表 return intfieldIdx DataTableresult newDataTable 根据用户选择的指标过滤出要查询的列intcols if listBoxZhibiao SelectedItems Count 0 如果没有选择指标 默认为显示所有指标 cols listBoxZhibiao Items Count for inti 0 i cols i result Columns Add table Columns i ColumnName 往结果数据表中添加所有列的列名 for inti 0 i this table Rows Count i 获取数据表的行数 this代表当前类的实例 DataRowrow result NewRow 创建与result表具有相同架构的一个新的一行数组 即row只有一行 for intj 0 j cols j if table Rows i j GetType Name DBNull 判断table中数据的数据类型为不为Nullrow j table Rows i j 当数据不是空值时 将表中数据按行读入row行数组中 这里注意row j 是表示这个一行数组的第j各元素 即第j列 result Rows Add row 将数据按行读入result数据表中 else 如果选择了指标 cols listBoxZhibiao SelectedItems Count 获取指标数for inti 0 i cols i fieldIdx listBoxZhibiao SelectedIndices i 获取指标列表框中所有当前选定项的从零开始的索引result Columns Add table Columns fieldIdx ColumnName 往result数据表中添加选择指标列的列名 for inti 0 i table Rows Count i DataRowrow result NewRow for intj 0 j cols j if table Rows i listBoxZhibiao SelectedIndices j GetType Name DBNull row j table Rows i listBoxZhibiao SelectedIndices j result Rows Add row 这里还只是实现了将查询结果放入内存中定义的result表中 我们需要的结果是当点击查询按钮时 用一个查询结果窗口将查询的结果数据显示出来 这就需要再次定义一个窗体 4新建查询结果窗体步骤1 按与添加基表查询窗口相同的方法添加一个Windows窗体 默认名为Form3 步骤2 设计查询结果显示窗口界面 适当调整窗口大小 并修改窗口Text属性为 查询结果 往窗体中添加DataGridView控件 并修改该控件 BackgroundColor 属性为 Window Anchor 属性修改为Top Bottom Left Right 以便窗口显示时表格显示界面随着窗口变化而自动调整大小 5为查询结果窗体添加事件处理步骤1 在查询结果窗口的标题栏处双击 响应Form3窗口的Load事件 进入Form3 cs编辑界面 先在Form3 的构造函数中 对dataGridView进行初始化 相关代码如下 publicForm3 InitializeComponent dataGridView1 Columns Clear 清空数据表dataGridView1 RowHeadersWidth 60 初始化数据表的列宽 新建一个数据表对象 实现dataGridView与数据表对象的连接 代码如下 publicDataTabletable 用于放置基表查询窗口中查询数据publicintflag 0 考虑到后面的组合查询 这里定义一个区分标识 flag值为1时为基表查询时调用 值为2时为组合查询调用privatevoidForm3 Load objectsender EventArgse if flag 1 dataGridView1 DataSource table 设置表的数据来源 步骤2 响应dataGridView1控件的CellFormating事件 设置查询结果显示数据表中每一行的行头的数据格式 privatevoiddataGridView1 CellFormatting objectsender DataGridViewCellFormattingEventArgse 为dataGridView的单元格设置格式 for inti 1 i dataGridView1 Rows Count i dataGridView1 Rows i 1 HeaderCell Value i ToString 将每一行的行头数字都转换为字符串形式 6单表查询窗体和查询结果窗体的连接步骤1 在基表查询窗体响应的 查询 按钮事件中添加如下代码就可以实现两个窗体的连接 privatevoidbtnStart Click objectsender EventArgse 在3中步骤6的代码的后面添加Form3form newForm3 申明一个查询结果窗口的实例form flag 1 form table result 将查询的结果从result表中赋给tableform Show 显示查询结果窗口 7运行程序 验证查询结果 行头的数字都被转换成了字符串格式 三 多表查询 数据分析多表连接查询的一般流程查询功能实现 数据分析 设计组合查询窗体及实现其功能前 对已有数据进行分析是十分必要的 根据环保部门对污染源查询的需求 分析可知组合查询有很多种 其中一种即是按地区 行业 流域查询 本实例中用到的数据库Database包含的三张表 G101 G102 G103 中恰好都包含了该三个字段的信息 其中地区 行业信息分别以 县 区 市 旗 8 行业类别 名称 字段形式存在于G101表中 而流域信息则以 3 受纳水体名称1 字段形式存在与G103表中 这里我们即实现按地区 行业 流域查询的组合查询功能 多表连接查询 以工业源为例 一般流程 1 当选择污染源类型为 工业污染源 时 界面显示出 重点污染源 和 一般污染源 两个单选按钮 2 选中 重点污染源 后 在基表选择复选列表框中显示出所有包含重点污染源信息的基表 此例中包含G101 G102 G103 3 先选中要查询的表 如将三张表全部选中 该三张基表的全部字段即在指标列表框中显示 这里注意 在选择基表前 则上要求 地区 行业 流域 复选框应该是不可选的 相应的复选列表框应该是不可用也不可选的 4 根据查询需求 选择需要查询的指标 显示在已选指标列表框中 如这里选择 1 原辅材料名称1 1 废水类型名称 县 区 市 旗 8 行业类别 名称 3 受纳水体名称1 字段信息 后三个字段只是为了验证结果 5 根据用户的需求 设置待查询指标的 地区 行业 流域 等限定信息 如这里限定 地区 行业 流域 分别为 黄石港区 卫生材料及医药用品制造 长江 黄石段 6 执行查询 将查询结果显示在查询结果窗体中 最终系统实现的组合查询功能如下图 查询功能实现 1添加并设计一个组合查询窗体步骤1 采用与基表查询窗体相似的方式 添加一个Windows窗体 并在该窗体上添加相关控件 1 2 3 4 5 6 7 9 10 11 19 20 17 18 8 12 13 14 15 16 这里用到了三个新的控件 CheckBox 复选框 CheckedListBox 复选列表框 和ListBox 列表框 控件 为该组合查询窗体上的各控件编号 如前图所示 在下表中显示了设计时修改的各控件的属性值 大小人为调整即可 以便更直观地了解每个控件的作用 步骤2 实现组合查询窗体与主窗体 主界面 的连接 在主窗体Form1 cs 设计 中展开数据查询 组合查询菜单 双击 组合查询 菜单项 响应该菜单项的Click函数 并添加相关代码 privatevoid组表查询ToolStripMenuItem Click objectsender EventArgse Form4form newForm4 form Show 运行程序 显示结果如下 初始打开时不可用 单选按钮不可视 2为组合查询窗体上的控件添加事件处理 实现多表连接查询功能 步骤1 添加污染源类型 在组合框控件中编辑需要添加的污染源类型文本 在基表查询中有相同的操作 程序运行后 步骤2 初始化窗体 因为窗体上控件众多 为了使每次查询时 窗体界面能美观 统一 最好对窗体进行初始化 这里我们在Form4 cs中自己编写了一个初始化函数 privatevoidInitForm 初始化窗口 checkedLBWuran Items Clear checkBoxDiqu Checked false 设置按钮 未选中 状态checkBoxHangye Checked false checkBoxLiuyu Checked false checkedLBDiqu Items Clear checkedLBHangye Items Clear checkedLBLiuyu Items Clear listBoxFactors Items Clear listBoxSelectedfactors Items Clear 注意 该函数编写后 需要被调用才能发挥作用 下一步即会涉及其调用过程 步骤3 鉴于只有工业污染源可划分为 重点污染源 和 一般污染源 这里需要设置工业污染源和 重点污染源 一般污染源 两个单选按钮的链接 在组合查询设计窗体上双击comboBox控件 响应其SelectedIndexChanged事件 并添加相关代码 privatevoidcomboType SelectedIndexChanged objectsender EventArgse InitForm 调用上一步骤中的初始化函数 以便每次变换污染源类型选项时 窗口界面都恢复为初始化后的状态if comboType Text 工业污染源 radioZhongdian Visible true radioYiban Visible true radioZhongdian Checked false radioYiban Checked false elseif comboType Text 农业污染源 radioZhongdian Visible false radioYiban Visible false 农业污染源分类 elseif comboType Text 生活污染源 radioZhongdian Visible false radioYiban Visible false 生活源分类 else radioZhongdian Visible false radioYiban Visible false 集中式污染处理设施分类 运行程序 显示结果如下 选中 工业污染源 后 即显示两个单选按钮 选择其它污染源时则不显示 步骤4 响应重点污染源和一般污染源单选事件 实现污染源所涉及基表表名往 基表选择 复选列表框中的添加 分别双击 重点污染源 和 一般污染源 单选按钮 响应CheckedChanged事件 在Form4类中增加如下代码 stringpollution type 定义一个污染源类型字符串 并将其赋值为空stringtable of diqu 定义该字符串是为了描述 地区 字段所在的基表stringtable of liuyu stringtable of hangye stringfield of diqu 定义该字段是为了说明 地区 字段在相应基表中的全称stringfield of liuyu stringfield of hangye 虽然这里只有三个基表 而且都属于重点污染源 原本可以不定义这些字符串 但是考虑到以后的扩充 当涉及到一般污染源时 地区 行业 流域不再位于G101和G103表中的情况 这里先定义这样一些变量 并对其进行赋值 privatevoidradioZhongdian CheckedChanged objectsender EventArgse if radioZhongdian Checked true checkBoxDiqu Enabled true 设置复选框为可用checkBoxHangye Enabled true checkBoxLiuyu Enabled true pollution type 重点污染源 table of diqu G101 table of hangye G101 table of liuyu G103 field of diqu G101 县 区 市 旗 field of hangye G101 8 行业类别 名称 field of liuyu G103 3 受纳水体名称1 InitForm checkedLBWuran Items Add 工业企业基本情况 往复选列表框中添加选项checkedLBWuran Items Add 主要产品 原辅材料及能源消费情况 checkedLBWuran Items Add 工业用水 排水情况 privatevoidradioYiban CheckedChanged objectsender EventArgse if radioYiban Checked true checkBoxDiqu Enabled true 设置复选框为可用checkBoxHangye Enabled true checkBoxLiuyu Enabled true InitForm 因为没有一般污染源相关的基表 所以这里没有添加项 运行程序 显示如下 因为暂时没有 一般污染源 基表信息 所以复选列表框中无显示 选中 重点污染源 后 将其相关基表表名添加进来 步骤5 响应组合查询窗体的Load函数 实现窗体与数据库的连接 同理 这里应该先添加命名空间System Data OleDb 在应用程序文件开头添加 usingSystem Data OleDb 以提供实现和通用数据 Access数据库 访问功能相关的类和方法 并定义一个连接对象 OleDbConnectionconn privatevoidForm4 Load objectsender EventArgse conn newOleDbConnection Provider Microsoft Jet OLEDB 4 0 DataSource Application StartupPath Database mdb 步骤6 响应基表选择复选列表框中的ItemCheck事件 实现指标字段 基表的列名 往指标选择列表框中的添加 此时有两种情况 1 当checkLBWuran复选列表框中鼠标点击的子项处于未勾选状态时 响应该ItemCheck事件后 鼠标点击该子项后 即勾选中某一表 此时需往listBoxFactors列表框中添加该基表列名 2 当checkLBWuran复选列表框中鼠标点击的子项已处于勾选状态时 响应该ItemCheck事件后 鼠标点击该子项后 即去掉该项的勾选 同时在listBoxFactors和listBoxSelectedfactors列表框中移除与该表名相关的所有字段 列名 这里为了使程序结构更明晰 我们自己编写了一个获取表名的函数privatestringgetTablenameFromIdx intidx stringtype 先选中该控件 然后在其预定义事件中找到ItemClick事件 进行响应 相关程序代码 privatestringgetTablenameFromIdx intidx stringtype 按照索引号获取表名 即获取checkLBWuran复选列表框中已选项对应的数据库中基表的表名 stringTableName if type 重点污染源 switch idx case0 TableName G101 break case1 TableName G102 break case2 TableName G103 break elseif type 一般污染源 添加一般污染源表名 添加其它污染源的表名 returnTableName privatevoidcheckedLBWuran ItemCheck objectsender ItemCheckEventArgse if checkedLBWuran Items Count 0 return intindex checkedLBWuran SelectedIndex 获取从当前选定项的从零开始的索引stringTableName if comboType Text 工业污染源 获取表名 并传递给TableName变量 if comboType Text 工业污染源 获取当前行中的列数 for intj 0 j cols j listBoxFactors Items Add TableName reader GetName j 往listBoxFactors列表框中添加选中表的列名 且添加字段格式类似为G101 代码 reader GetName j 用于获取指定列的名称 reader Close catch Exceptionex catch语句可以用于捕获程序运行时出现的异常 并以对话框的形式显示出来 MessageBox Show ex Message finally conn Close else 当事件响应前 点击的复选框处于选中状态 事件响应后 即使该复选框处于未选中状态 同时移除listBoxFactors和listBoxSelectedfactors列表框中与该表关联的所有字段名 if checkedLBWuran CheckedItems Count 1 有一个选中项时 选中一个基表时 设置地区 行业 流域等复选框及复选列表框的状态 checkedLBDiqu Items Clear checkedLBHangye Items Clear checkedLBLiuyu Items Clear checkBoxDiqu Checked false checkBoxHangye Checked false checkBoxLiuyu Checked false stringsql Select from TableName OleDbCommandcmd newOleDbCommand sql conn try conn Open OleDbDataReaderreader cmd ExecuteReader intcols reader FieldCount for intj 0 j cols j if listBoxFactors Items Contains TableName reader GetName j true listBoxFactors Items Remove TableName reader GetName j if listBoxSelectedfactors Items Contains TableName reader GetName j true listBoxSelectedfactors Items Remove TableName reader GetName j reader Close catch Exceptionex MessageBox Show ex Message finally conn Close 运行程序 结果显示如下图 步骤7 响应btnMove和btnMoveAll两个Button按钮的Click事件 使用户按需要选择需要查询的字段或选择全部字段 并将其添加到listBoxSelectedfactors列表框中 相关代码如下 privatevoidbtnMove Click objectsender EventArgse if listBoxFactors SelectedItem null return else stringfactor listBoxFactors SelectedItem ToString 获取listBoxFactors列表框中选中项的值 并转换为字符串格式赋给factor变量if listBoxSelectedfactors Items Contains factor false 判断当listBoxSelectedfactors列表框中不包含该factor字段时 即将其添加进来 listBoxSelectedfactors Items Add factor privatevoidbtnMoveAll Click objectsender EventArgse 将listBoxFactors列表框中所有字段都添加listBoxSelectedfactors列表框中 for inti 0 i listBoxFactors Items Count i if listBoxSelectedfactors Items Contains listBoxFactors Items i ToString false listBoxSelectedfactors Items Add listBoxFactors Items i ToString 运行程序 显示如下 点击btnMove按钮 选择指标 点击btnMoveAll按钮 选择全部指标 步骤8 响应listBoxSelectedfactors列表框的DoubleClick事件 实现该列表框中选中项的移除 以便用户删除不感兴趣的指标 privatevoidlistBoxSelectedfactors DoubleClick objectsender EventArgse 通过双击listBoxSelectedfactors列表框中选中项删除该项 listBoxSelectedfactors Items Remove listBoxSelectedfactors SelectedItem 先选中该控件 然后在其预定义事件中找到DoubleClick事件 进行响应 运行程序 显示如下 选中该指标项 双击删除 步骤9 设置组合查询的限定条件 即要实现 地区 行业 流域 相关字段的读取和显示 因为该组合查询是为了实现按 地区 行业 流域 查询污染源 在查询过程中 由于 地区 行业 字段位于G101表中 流域 字段位于G103表中 所以 当查询某一指标时 若限定该指标的 地区 行业 流域 查询时就有可能涉及到多张表 即涉及多张表的连接查询 响应 地区 行业 流域 checkBox的CheckedChanged事件 从G101和G103表中获取相应字段值 并读入checkedLBDiqu checkedLBHangye checkedLBLiuyu复选列表框中显示出来 相关程序代码如下 privatevoidcheckBoxDiqu CheckedChanged objectsender EventArgse 从地区字段所在基表中读取地区类别字段值 并添加到checkLBDiqu复选列表框中 if checkedLBWuran CheckedItems Count 0 判断checkedLBWuran复选列表框中是否有选中基表 if checkBoxDiqu Checked true 当勾选中 地区 复选框时 往checkedLBDiqu复选列表框中无重复地添加字段值 即地区类别 checkedLBDiqu Enabled true checkedLBDiqu Items Clear stringsql Select field of diqu from table of diqu 利用SQL语句从数据源中获取地区字段所在基表中的地区字段列OleDbCommandcmd newOleDbCommand sql conn try conn Open OleDbDataReaderreader cmd ExecuteReader 按行读取数据 while reader Read if checkedLBDiqu Items Contains reader GetValue 0 false else checkedLBDiqu Items Clear checkedLBDiqu Enabled false else checkBoxDiqu Checked false 当checkedLBWuran复选列表框中未选中任何基表时 即设置该复选框处于未选状态 privatevoidcheckBoxHangye CheckedChanged objectsender EventArgse 从行业字段所在基表中读取行业类别字段值 if checkedLBWuran CheckedItems Count 0 if checkBoxHangye Checked true checkedLBHangye Enabled true checkedLBHangye Items Clear stringsql Select field of hangye from table of hangye OleDbCommandcmd newOleDbCommand sql conn try conn Open OleDbDataReaderreader cmd ExecuteReader while reader Read if checkedLBHangye Items Contains reader GetValue 0 false else checkedLBHangye Items Clear checkedLBHangye Enabled false elsecheckBoxHangye Checked false privatevoidcheckBoxLiuyu CheckedChanged objectsender EventArgse 从流域字段所在基表中读取流域类别字段值 if checkedLBWuran CheckedItems Count 0 if checkBoxLiuyu Checked true checkedLBLiuyu Enabled true checkedLBLiuyu Items Clear stringsql Select field of liuyu from table of liuyu OleDbCommandcmd newOleDbCommand sql conn try conn Open OleDbDataReaderreader cmd ExecuteReader while reader Read if checkedLBLiuyu Items Contains reader GetValue 0 false else checkedLBLiuyu Items Clear checkedLBLiuyu Enabled false elsecheckBoxLiuyu Checked false 运行程序 显示结果如下 选中基表后 地区 行业 流域 复选框才可选 步骤10 响应btnQuery查询按钮 实现多表连接查询 并将结果显示在查询结果窗体中 1 获取查询时关联到的所有表的表名 这里自定义了一个函数getTablenames 实现该功能 同时还定义了一个辅助函数IsInTables 判断某张表是否存在表集合中 privateboolIsInTables string tablenames stringstr 判断某张表str是否在表集合tablenames中 if tablenames null returnfalse intcnt tablenames Length inti 0 for i 0
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 公司物流部安全培训内容课件
- 房地产设计管理年终总结
- 科学线上教学工作总结
- 《看云识天气》课件
- 项目费用合同模板5篇
- 2025 秋新译林版英语八年级上册Unit 3 To be a good learner核心知识点总结
- 广东省云浮市新兴县2024-2025学年高一下学期期末考试化学考点及答案
- 广东省清远市阳山县2023-2024学年高一下学期期末考试思想政治题目及答案
- 手术室专业护理知识
- 护理实习生临床小讲课实施规范
- 脑出血康复期患者护理
- 《脑性耗盐综合症》课件
- 【绥化】2025年黑龙江省绥化市兰西县体彩中心招聘体彩专管员1人笔试历年典型考题及考点剖析附带答案详解
- 2025年1月浙江卷化学试题(解析版)
- 煤炭信息化知识培训总结课件
- 2025年中国工商银行校园招聘考试题库历年考试真题及答案
- 2025年香港销售合同范本
- 2025年AI应用AI Agent架构新范式报告
- 国有企业财会监督体系构建的路径选择与机制创新
- 南京财经大学《812西方经济学(宏观经济学、微观经济学)》历年考研真题及详解
- 肉制品工艺学-香肠类制品-课件
评论
0/150
提交评论