• 热门专题

DataGridView中使用BindSource进行数据绑定操作

作者:shengqin105  发布日期:2013-10-17 09:12:24
Tag标签:DataGridView  BindSource  
  • 使用WinForm已经有好长的一段时间,虽然一直知道得数据绑定是.NET下一项很强大的功能,平时也用的不少,但都是自己用代码写的绑定方法,纯代码流有好处是可以足够的灵活,数据你爱怎么折腾就怎么折腾,而且如果结构设计得好的话可以很方便重用。还有一个问题是,用WinForm窗体控件自带的绑定方式,会生出很多莫名的文件,这还不要紧,一旦涉及到ADO的东西我直接就缴械了——自从认识LinQ后我就很久没用字符串来操作数据库啦,也许那会效率很高,但也没有证据显示LinQ的效率低,在非严谨应用场景里,我更重视开发的效率。

     

    DataGridView控件,凡是涉及到数据库一般离不开这个控件,其功能强大到足以让我仰视不止,在DataGridView下对数据库进行增删修改是家常便饭,我还真不敢说我对这个控件用得有多熟,如果可以选择我还真不愿意将精力用在枯燥的界面处理上。

     

    重新用回SQLServer的东西,因为处理的几个表比较简单,所以我打算直接用WinForm自动生成的数据绑定功能,Google了一番,发现网上并没比较完整的例程(可能东西比较简单),于是小小的作一下笔记,经飨后来者,顺便做一个备忘。

     

    1、建立SQLServer的数据表

     

    这点是玩SQLServer的入门活,我就不细说,因为是做演示,我弄了一个最简表出来,如下图所示,对了,我建表用的是SQL Server Manager Studio,对大多人来说应该没有难度。

    202103261.jpg

     

    2、在工程中生成DataSet数据集

     

    我个人对DataSet的理解只数据库实体的一个抽象,简单的说就是将原本用字符串操作数据库转变成用Adapter来操作,当然,其中也保留了灵活的SQL指令功能。

     

    在生成DataSet之前,请在VisualStudio中的服务器资源管理器里生成一项“数据连接”,连接步骤1数据表Table_Test所在的数据库,如下图所示(图中除Table_Test外其他请你们忽略,其他表不是我写本Blog所要用到的)。

    203254658.jpg

     

    建立好数据连接后,在工程里新建一个数据集(DataSet),我个人的命名是MyDataSet,建立好后你会在资源管理窗口里见到一个MyDataSet.xsd的文件,你若有兴趣可以看一下里面的东西,我不解释。你双击xsd这个文件,它会提示你从服务器资源管理器里导入数据,你打开服务器资源管理器将上图显示的Table_Test直接拖到里面,会自动生成下面的表,DataSet的强大在于TableAdapter的强大,这是后话。

    203958179.jpg

     

    3、建立DataGridView的界面

     

    新建一个WinForm的窗体,从工具箱里往窗体里拖一个DataGridView的控件,这很简单,控件名姑且默认就好了。接下来是开始绑定数据。

     

    DataGridView的右上角有个小三角形,点击——选择数据源——其他数据源——项目数据源——MyDataSet——Table_Test,好了,DataGridView就已经作好绑定,它会自动显示Table_Test的全部内容,我这里当然是空,如下图所示:

    204819324.jpg

     

    上面ColumnHeader的样式我是修改过的,别太纠结,但重点不在这里,你看当前窗体的下方,VisualStudio会自动生成下面的几个东西,这分别是MyDataSet、BindSource、TableAdapter的实例,是属于当前窗体下的私有成员,这才是最关建的内容,当然,如果你仅是作显示完全可以不用理会:

    205004860.jpg

     

    4、DataGridView的编辑

     

    在DataGridView控件右上角的小三角形下,有三个选项:启动添加、启动编辑、启动删除,一般情况下要视具体情况而定,我这姑且就全选了。

     

    在VisualStudio下生成工程,如下图所示,你可以随意编辑,因为ID的列,我在建表时设定自增量,并作为表的一个主键,所以本列你是编辑不了的,它会自动填充ID,只是我想不明白ID怎么会往负里增大呢?

    205744799.jpg

     

    5、绑定数据的保存

     

    到这一步之前,我们还没有使用任何一句代码,我只能说,单纯的数据显示是非常傻瓜的,如果你想纯代码做到这一步,我想就算不困难也要花不少时间的。

     

    数据绑定的概念是,将数据库的数据同步到数据控件上,当控件上显示的数据作了修改后,也一定能同步回数据库里,这一步就必须要动用到伟大的Code了。保存的时机自己可以随便,我在此是用了一个ContextMenuStrip的菜单控件,通过右键显示快捷菜单,再点击保存,其响应函数的内容如下:


    /// <summary> 
    /// 绑定数据时自动生成的代码,只用于显示数据 
    /// </summary> 
    /// <param name="sender"></param> 
    /// <param name="e"></param> 
    private void MaterialEditForm_Load(object sender, EventArgs e) 
    { 
        // TODO: 这行代码将数据加载到表“myDataSet.Table_Test”中。您可以根据需要移动或删除它。 
        this.table_TestTableAdapter.Fill(this.myDataSet.Table_Test); 
    } 
    // 
    // 
    /// <summary> 
    /// 右键快捷菜单的响应函数 
    /// </summary> 
    /// <param name="sender"></param> 
    /// <param name="e"></param> 
    private void 保存数据ToolStripMenuItem_Click(object sender, EventArgs e) 
    { 
        //结束DataGridView的编辑状态 
        this.dataGridView1.EndEdit(); 
        //结束BindSource的编辑状态,为提交更改作准备,重要 
        this.tableTestBindingSource.EndEdit(); 
        // 
        //检查是否作出更改 
        if (this.myDataSet.GetChanges() == null) 
        { 
            return; 
        } 
        // 
        //同步数据至实体数据库中 
        this.table_TestTableAdapter.Update(this.myDataSet); 
    }

    6、结语

     

    相像过么?正常情况下我们要插入哪怕一条小小的记录(更别提删除跟更新了),加上各种过滤的状况,都不能说是很容易的事,可使用数据绑定的方法,只需要上面数句话就可以轻易完成添加、修改、删除等全部的功况——这简直是逆天的节奏啊!!!

     

    (原来在作保存后,作为主键的ID是会自动变成正数的,如下图所示:)

    211505764.jpg


About IT165 - 广告服务 - 隐私声明 - 版权申明 - 免责条款 - 网站地图 - 网友投稿 - 联系方式
本站内容来自于互联网,仅供用于网络技术学习,学习中请遵循相关法律法规