前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >X# 开发 Winform 项目在 gridView 中显示数据

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

作者头像
firstxinjie
发布2024-12-06 14:27:32
发布2024-12-06 14:27:32
9500
代码可运行
举报
文章被收录于专栏: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
复制
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
复制
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 删除。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档