前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >X# 开发 Winform 项目在 gridView 中显示数据

X# 开发 Winform 项目在 gridView 中显示数据

作者头像
firstxinjie
发布于 2024-12-06 06:27:32
发布于 2024-12-06 06:27:32
35900
代码可运行
举报
文章被收录于专栏:X#(XSharp)X#(XSharp)
运行总次数:0
代码可运行

前言

笔者是一名使用 Visual FoxPro 开发近二十年的程序员,使用过从VFP5~VFP9 的所有版本,用她写过不多不少、大大小小、好好烂烂的程序。虽天资愚钝,对程序设计却满腔热血。一路有过拼搏,有过迷茫,有过软件项目交付成功的成就和喜悦,有过项目烂尾的无奈......

第一次听到 X#,是前几年从 xinjie 老师那听来的,说 X# 是一门 .net 框架里的语言,他在梅子论坛载了几篇文章,可走马观花的看了一遍,感觉还要学 .net 的很多知识且 FoxPro 方言实现的太少,加之自己的开发框架及技术体系基本能应对目前的开发需求,就忽略过了。其实对 .net,我很久就想转过去的,买过好几本经典书,就是wrox那种红皮由清华大学出版的,VB.net,C#,ASP.NET 等,每本厚度都在一千页以上,可惜都束之高阁去吃灰了。.net 框架体系确实强大,无所不能,然而可能正是因这过于浩繁的内容,让我半途而废了!

前段加入了 xinjie 老师的群,在老师的带领下,大家都跃跃欲试,我也看到了 X# 最新版本的发展,尤其是对 Foxpro 方言的越来越高的兼容度,我想:是时候该尝试一下了。我想,X# 对于想我这一批老 Foxer 来说,是极具意义的,从几个方面:

  • VFP9 早就停更,其7432最后一个补丁发布于2009年已过去15年之久
  • 尽管 VFP9 很优秀,但不可否认的是:有些方面的短板很难补齐,要不就是东拼西凑,随着客户对 App 需求越来越高,有些方面可能会吃力
  • 对我来说,VFP在数据处理方面的优势得天独厚,很丝滑,很难习惯其他方式
  • 过高的学习成本,身体及精力状态下滑,我都不想再去学习一门”全新“的语言了
  • 可以直接使用庞大的 .Net 的生态资源
  • X# 日臻完善,越来越好的兼容 Foxpro 方言,可能在不远的某天,我就可以用她写一个完整的商业项目了

当然,任何过程都不会是一帆风顺的。在学习X#过程中,我感到最大的难度或应用阻碍在几方面:

  • X# 在国内没有生态,可能除了 xinjie 老师的群,几乎没人关注
  • 帮助文件全是E文,里面说明过于简单粗糙,示例代码太少,有些还是未实现的(todo)!
  • 没有系统的学习资料,很多需要摸索
  • VFP 一些核心的内容还是没有实现,如缓冲及提交更新等,要么就是我还没掌握

下面,我将使用X#开发一个Windows Form应用,实现一个最基本的从SQL服务器查询数据并显示在grid中的小例子。例子很简单,只希望管中窥豹,抛砖引玉,共同学习!

我的开发环境

  • 编辑器:Visual Studio 2022社区版
  • XSharp(X#) 2.20.0.3,低于此版本未作测试

开发环境的搭建,这里不会谈论,如果需要,可以参看其他资料或 xinjie 公众号文章。

新建项目

点击顶部菜单,文件--新建--项目,弹出下列窗口,按图示一步步完成项目创建。

不出意外的话,你会看到下图:

是不是有些熟悉?对,跟在 VFP 里新建的表单差不多,只是 form 的图标不是狐狸头而是 .net 图标,还记得之前说过的吗?X#是一门.Net语言!

项目设置

为了能让示例顺利运行,我们还需要对项目进行一些设置。

X# 项目必须引入基础程序集 DLL:XSharp.Core.DLL、XSharp.RT.DLL、及访问 SQL 所需的 XSharp.Data.DLL、及 Foxpro 方言需要的 XSharp.VFP.DLL,这就类似 VFP 里的 Set Liberay To 设置,照如下图示添加这些引用:

点”添加“后,再点确定,注意看到”解决方案资源管理器“的 References 下,出来刚选的 4 项就可以了。

form设计及代码

回到 form 设计界面,我们往 form 中拖入一个 DataGridView 组件用于记录表格显示。

然后点击 form 空白处,右边切换到“属性”窗口,选择“事件”,找到“FormClosed”,这是“关闭窗体”事件,类似 VFP 的 Form.Unload,我们要在这个事件方法里做一些事情,双击右边的框,就会自动产生事件方法”Form1_FormClosed",并自动打开代码窗口:

我们键入或复制以下代码到合适的位置:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
USING System
USING System.Collections.Generic
USING System.ComponentModel
USING System.Data
USING System.Drawing
USING System.Linq

USING System.Text
USING System.Threading.Tasks

USING System.Windows.Forms

BEGIN NAMESPACE gridSample

    PUBLIC PARTIAL CLASS Form1 ;
        INHERIT System.Windows.Forms.Form

        //自定义属性:保存连接句柄
        PROTECTED nHandle AS INT

        PUBLIC CONSTRUCTOR()   STRICT//Form1构造方法
            InitializeComponent()

            // 连接数据库, 注意下面SqlStringConnect里需要改为你自己的sql服务器及数据库信息
            THIS.nHandle=SqlStringConnect("Driver={SQL Server};Server=(local);Database=你的数据库;uid=sa;pwd=123456;", FALSE)
            IF THIS.nHandle<1
                Messagebox("连接数据库失败")
                RETURN
            ENDIF

            // 执行sql查询, 注意下面的select语句需要改为你自己的,这里仅演示
            SqlExec(THIS.nHandle,"Select id,name FROM 你的表", "cur")

            // 数据源对象
            LOCAL loDs AS DbDataSource
            loDs =  DbDataSource() //创建一个附加到当前工作区的DbDataSource对象
            loDs.ShowDeleted = .F. //不显示”删除标记“虚拟列
            loDs.ShowRecno   = .F. //不显示”记录号“虚拟列

            // 给dataGridView绑定数据源
            THIS.dataGridView1.AutoGenerateColumns=.T. //按数据源的字段,自动生成表格列
            THIS.dataGridView1.DataSource=loDs //数据源
        END CONSTRUCTOR

        PRIVATE METHOD Form1_FormClosed(sender AS System.Object, e AS System.Windows.Forms.FormClosedEventArgs) AS VOID STRICT
            **关闭时,断开连接句柄
            IF THIS.nHandle>0
                SqlDisconnect(THIS.nHandle)
            ENDIF
        END METHOD
    END CLASS 
END NAMESPACE

需要注意的是,SqlStringConnect 和 SqlExec 两处需要根据你自己的服务器和表名进行修改!

之后,点击工具栏的”启动“或按 F5 就可以试着运行项目,如果你看到类似下面界面,那么恭喜您!

我们再回头看这个 form1.prg 文件里的代码:

主要代码我写了注释,从功能上就是在窗体运行时,连接 SQL 数据库,并执行一个 SQL 查询,将集合记录显示在 gridView 组件里。窗体关闭时就断开 SQL 连接并结束程序运行。如果你是多年的 Foxer,除了最开始的 USINGNAMESPACE 等比较陌生外,CONSTRUCTOR 方法体里的代码应该是比较熟悉的!它部分代码简直跟 VFP 代码一模一样,不是吗!这正是 X# 的“Foxpro"方言的意义,编译器认识各种 XBASE 系方言,它可将这些”方言“统一编译为可执行代码运行,“方言“的引入最大化兼容你使用的老语言的命令和函数等习惯,减少你学习 X# 和项目迁移成本!

那些陌生的命令是什么?

记住,X# 是一门 .net 语言,那些是 X# 语言本身的命令及语言特性!如需要深入了解,你可以看看 XSharp 自带的帮助文件,敲个F1看到了吗?

还有疑问?

我敲 F5 或点“启动”运行了项目,出现了运行窗体!可程序是从哪里启动执行的呢?

VFP 里每个项目都要指定一个“主”文件,也就是项目管理器里显示粗体的那个文件(main file),例如我一般命名为 main.prg。项目连编为 exe 运行时,就从主程序开始执行,里面开头一般都 SET 环境,设置搜寻PATH,设置类库过程文件,之后运行你的功能!

你能想到这点,很好!找到“解决方案资源管理器”项目文件里的Program.prg,你会找到答案的,双击打开它:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
USING System
USING System.Collections.Generic
USING System.Linq
USING System.Text
USING System.Windows.Forms

USING gridSample

[STAThread] ;
FUNCTION Start() AS VOID

Application.EnableVisualStyles()
Application.SetCompatibleTextRenderingDefault( FALSE )
Application.Run( Form1{} )

RETURN

对!这就是项目开始运行的程序,Start()函数是入口方法,可以看到,在 Start 里创建 Form1 窗体类的实例并打开了。这个 Start 函数是必须存在的,不能修改为其他函数名,否则编译出错。

结语

通过这个简单的例子,相信您对在 X# 里使用 Foxpro 方言开发一个项目已有所了解。让你明白,有些内容对你来说是熟悉而亲切的,或许有一天你会投入他的怀抱。

可以看到,随着 X# 的日臻完善,对 Foxpro 方言的兼容性越强,这对于 Foxer 来说,是一个好的福音。得益于 .net 庞大而丰富的生态,再有 Foxpro 天然的数据处理的优势,使得 foxer 可能实现之前无法或很难实现的功能,开辟新的开发领域,如B/S,网络交互等。

当然,本文的示例是一个最简单的数据浏览的项目,对于实际项目中数据处理的更多需求,如检索,新增、修改、删除等,还有待我们进一步学习和研究。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-06-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 xinjie的VFP 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
Jtti:服务器灾难恢复计划的意义
服务器灾难恢复计划(Disaster Recovery Plan,简称DRP)的重要性在于确保组织在面对各种灾难性事件时能够迅速、有效地恢复业务运营。灾难恢复计划通常包括一系列策略、流程和技术措施,旨在最小化因灾难性事件而导致的数据损失和服务中断。
jtti
2023/11/29
2730
一份更好的云灾难恢复计划指南
现如今,灾难恢复即服务已然正在迅速成为企业利用云服务来解决灾难恢复挑战的一种理想的方式。 对于存储专业人员来说,灾难恢复仍然是一项持续性的挑战。因为与许多其他IT领域不同,近年来,灾难恢复的环境正在变
静一
2018/03/27
1.2K0
一份更好的云灾难恢复计划指南
从容应对灾难——全面解析业务连续性管理
数据库缓存的一致性问题成为企业运维的挑战。尽管通过缓存提升性能不可避免地带来不一致性,企业仍可通过设置缓存过期时间、使用消息中间件、采用适当的更新策略(如更新数据库后删除缓存)等手段,将不一致的时间窗口尽量缩短,保障数据库与缓存的最终一致性,从而提升系统的稳定性和性能。
Echo_Wish
2024/11/13
2450
从容应对灾难——全面解析业务连续性管理
高效IT灾难恢复计划应该涵盖的7大要素
飓风、龙卷风、地震、火灾、洪水、恐怖袭击以及网络攻击,您要知道所有这些问题都可能会随时发生在您的公司。您可能也已经制定了灾难恢复(DR)计划,来保护企业的数据、员工和业务安全。
FB客服
2018/07/30
8470
构建更好的云灾难恢复计划指南
如今,灾难恢复即服务很快成为企业利用云计算解决灾难恢复挑战的理想方式。 灾难恢复仍然是存储专业人员面临的持续挑战。因为,与IT的许多其他领域不同,围绕灾难恢复的情况变得更加复杂,并且难以在近年来得到处理。 首先,“灾难”的定义已扩大到几乎包括任何服务中断。第二,发生灾难的原因很多。人们都听到了自然灾害(地震,洪水,飓风),还有人为灾难,如网络攻击,勒索软件,意外的用户错误或企业破坏。第三,在灾难发生时,人们必须考虑的数据量已经呈指数增长。第四,用户对快速恢复的期望已经大大增加。如今,用户期望他们的关键
静一
2018/03/27
9430
构建更好的云灾难恢复计划指南
保障业务不中断:探索容灾系统的秘密
1、 据 Windows Centra 报道,微软计划在本月晚些时候发布新款 Surface Pro 和 Surface Laptop 硬件产品,而这些产品将会作为微软首款人工智能 PC 推出。--oschina
希里安
2024/03/20
2050
保障业务不中断:探索容灾系统的秘密
五,知识域:业务连续性
了解业务连续性计划制定的批准实施工作的内容并理解风险降低风险转移风险规避和风险接受四种风险处置方式。
紫禁玄科
2022/03/24
5470
企业采用云端进行灾难恢复的3条建议
本文介绍了企业采用云端进行灾难恢复的三条建议:1.积极采用云计算实施灾难恢复;2.云平台帮助企业运行灾难恢复和运营连续性系统;3.将灾难恢复功能外包给安全运营中心(SOC)。
企鹅号小编
2018/01/09
7330
如何管理好企业的数据
灾难恢复没有银弹。一旦发生停机,企业高管们会条件反射地以最快地速度采取各种灾难恢复手段。 虽然大多数IT主管和数据管理专家承认没有万全的安全解决方案来保护和恢复数据,但他们一致认为,组织应该采取一些必要的步骤。 那么,在重要文件和应用程序发生灾难时,企业应该采取哪些必要的预防措施呢?这里盘点了十二个由数据存储、数据管理和灾难恢复专家们提出的意见。 1. 进行数据评估 进行数据评估,可以帮助你了解企业中的高价值数据资产——你的客户信息和其他敏感数据,哪些文件被大量使用,以及谁在使用它们,与
静一
2018/03/16
1.5K0
零停机、零损失:高可用架构的企业级最佳实践
在数字经济浪潮中,数据资产已成为企业生存发展的核心命脉。从个人身份信息、金融交易记录到商业机密文档,每比特数据都需要构筑多维度安全防线。面对日益复杂的网络攻击、系统故障及自然灾害威胁,构建具备弹性恢复能力的数据基础设施,已成为保障业务连续性的关键命题。
Michel_Rolle
2024/12/30
1.5K0
【“微软蓝屏”事件暴露了网络安全哪些问题?】建设安全稳固的网络基础设施
近日,一次由微软视窗系统软件更新引发的全球性“微软蓝屏”事件,不仅成为科技领域的热点新闻,更是一次对全球IT基础设施韧性与安全性的深刻检验。这次事件,源于美国电脑安全技术公司“众击”提供的一个带有“缺陷”的软件更新,它如同一颗隐形炸弹,在全球范围内引爆,导致近850万台设备遭遇故障,横跨航空、医疗、传媒等众多关键行业,甚至造成美国超过2.3万架次航班延误,其影响之广令人震惊。面对如此大规模的系统中断,网络安全与系统稳定性的讨论再次被推上风口浪尖。如何构建更加稳固和安全的网络环境?在网络安全和系统稳定性方面我们仍面临着严峻考验。快来分享你的观点吧!不论是问题解析、建议提出还是展示你所在领域中预防类似事件的有效实践,每一篇真知灼见都是对网络安全领域的宝贵贡献。
Francek Chen
2025/01/23
1090
【“微软蓝屏”事件暴露了网络安全哪些问题?】建设安全稳固的网络基础设施
服务器的冗余和备份设置方法有哪些?
为了确保服务器的高可用性和业务连续性,设置冗余和备份是至关重要的。本文将探讨如何通过实施冗余配置和备份策略来防止单点故障导致的系统宕机。内容包括冗余服务器架构、数据备份方案、灾难恢复计划,以及如何监控和测试这些机制的有效性。通过有效的设置,可以大幅提升系统的稳定性和恢复能力。
用户11163528
2024/09/19
5410
灾难发生时云备份至关重要
2017年9月和10月对许多人来说可能记忆深刻。哈维飓风在9月袭击了美国德克萨斯州,几个星期后,伊尔玛飓风对佛罗里达州造成了严重破坏,随后在墨西哥和危地马拉发生了灾难性的地震。接下来是10月的玛丽亚飓风,袭击了波多黎各和加勒比地区的大部分地区。而就在近日,加利福尼亚州南部地区发生大规模的山火。 这些频发的自然灾害加强了人们对这样一个事实的认识,即在意外事件发生之前,有必要进行大量的规划工作,减轻损失。这适用于应对紧急事件的各级政府机构以及各个组织。 作为整体灾难准备工作的一部分,组织需要制定一个经过深思熟虑
静一
2018/03/28
8440
如何在云中满足当今的灾难恢复需求
灾难恢复(DR)如今已经成为组织的首席信息官的首要任务。实际上,根据Enterprise Strategy Group的调查,改进数据备份和恢复是仅次于安全措施的IT部门第二个优先事项。
静一
2020/11/11
8870
如何在云中满足当今的灾难恢复需求
重写边缘计算的灾难恢复计划
系统和应用程序分散在企业和云中的时代,IT领导者必须重新考虑其灾难恢复计划。 多年以来,编写灾难恢复计划一直是IT部门的责任,但是现在必须重新调整这些计划,以针对边缘计算和云计算环境进行故障转移。有哪
静一
2019/09/26
6890
重新考虑云计算的灾难恢复
随着持续复制技术的采用和灾难恢复专业化,推动了更多灾难恢复即服务(DRaaS)公司的发展和成长,对于那些计划为其混合计算环境进行灾难恢复的公司来说,可以获得更多可用的帮助。但是,如果没有定义灾难恢复目标,则这些帮助都不会非常有效。
静一
2018/12/29
1.1K0
CDP灾难恢复简介
在过去的十年中,数据和数据驱动的洞察力与公司有效运营能力的整合出现了爆炸性增长,为那些做得好的公司带来了不断增长的竞争优势。我们的客户已经习惯了这种洞察力带来的决策速度。数据对于长期战略和日常甚至每分钟的运营都是不可或缺的。
大数据杂货铺
2022/12/02
8110
CDP灾难恢复简介
数据交给云服务商就万事大吉?备份与容灾一个也不能少丨科技云·视角
也许很多企业很幸运,从来没有经历过数据丢失。但是,一旦发生企业关键数据的丢失,就会很大程度上影响业务发展,同时造成严重经济损失。
科技云报道
2022/04/14
4850
数据交给云服务商就万事大吉?备份与容灾一个也不能少丨科技云·视角
技术方案|某工业集团PaaS容灾方案
在当今快速发展的数字化时代,业务的连续性和稳定性已成为企业核心竞争力的重要组成部分。然而,由于各种原因,企业常常面临着数据丢失、系统瘫痪等潜在风险。因此,制定一套科学、高效的容灾方案至关重要。本文将围绕某全球领先的工业集团如何通过灵雀云企业级云原生平台ACP(以下简称ACP)实现高效的容灾方案展开深入探讨,旨在为您提供可借鉴的经验和启示。
灵雀云
2024/02/22
2430
技术方案|某工业集团PaaS容灾方案
打破壁垒,共创未来:银行SRE与虚拟IT组织的跨界融合实践
摘要:本文探讨了银行SRE团队与其他跨职能虚拟组织(如业务连续性委员会、技术架构委员会和风险管理委员会)之间的协作模式。分析了各委员会的职能与目标,并阐述了SRE团队如何与这些组织协同工作,确保银行系统的高可用性、稳定性和可靠性。通过明确职责分工、优化协作流程、设立跨职能沟通渠道和共享绩效指标,银行能够提高运维效率,减少角色冲突,推动技术创新,确保业务连续性和风险控制。
嘉为蓝鲸
2025/03/18
830
打破壁垒,共创未来:银行SRE与虚拟IT组织的跨界融合实践
相关推荐
Jtti:服务器灾难恢复计划的意义
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档