DataGridView的添加、编辑、更新

今天说说DataGridView吧,在一个小项目中用到了这个。面对的问题是要在DataGridView中编辑、更新其中的值,然后怎么回写到数据库中?一开始的想法也是用循环读取Cell,然后自己手动回写到数据库中,但总觉得不方便,认为微软会把这些工作封装好的,就上网查了一下,发现确实有这个功能。先描述一下数据库中的结构

    表1                                               表2

ID Name SexID                      ID   Sex

1      A      1                           1      男

2      B      2                           2      女

3      C      2

一开始的绑定是很容易的,但绑定后更新不了数据库中的值,一更新就提示SexID的值是没设置数据源的,因为SexID是外键。还好在网上查到了一个折中的解决办法,是在建立一个DataTable自己做映射:

    DataTable dtRelation = new DataTable();
    dtRelation.Columns.Add("Code",typeof(byte));
    dtRelation.Columns.Add("DisplayString",typeof(string));
    dtRelation.Rows.Add(new object[] { 0, "苹果" });
    dtRelation.Rows.Add(new object[] { 1, "香蕉" });
    dtRelation.Rows.Add(new object[] { 2, "西瓜" });

    2.设置下拉列表列(DataGridViewComboxColumn)属性:

    下拉列表列.DataSource = dtRelation;
    下拉列表列.ValueMember = "Code";
    下拉列表列.DisplayMember = "DisplayString";  

    下拉列表列.DataPropertyName = 数据源.列名;

后来我发现其实不用DataTable也可以直接让DataGridView完成绑定2个表的操作,而且更新时是可以直接更新的:

        SqlDataAdapter da;
        SqlCommand cmd;
        SqlCommandBuilder cmdBuilder;
        DataSet ds;

        private void DataBind()
        {
            da = new SqlDataAdapter(cmd);
            cmdBuilder = new SqlCommandBuilder(da);

            ds = new DataSet();
            da.Fill(ds, "Students");

            dataGridView1.AutoGenerateColumns = false;

            //绑定数据源
            dataGridView1.DataSource = ds.Tables["Students"];

            Column1.DataPropertyName = ds.Tables["Students"].Columns[1].ColumnName;
            Column2.DataPropertyName = ds.Tables["Students"].Columns[2].ColumnName;
            Column3.DataPropertyName = ds.Tables["Students"].Columns[3].ColumnName;
           

            //初始化性别
            string sql_Sex = "select * from Sex";
            SqlCommand cmd_Sex = new SqlCommand(sql_Sex, Main.Conn);
            SqlDataAdapter da_Sex = new SqlDataAdapter(cmd_Sex);
            DataSet ds_Sex = new DataSet();
            da_Sex.Fill(ds_Sex, "Sex");
            Column3.DataSource = ds_Sex.Tables["Sex"];
            Column3.DisplayMember = "Value";
            Column3.ValueMember = "ID";
        }

        string sqlSTR = "select * from Students";
        cmd = new SqlCommand(sqlSTR, Main.Conn);
        DataBind();

至此,我们已经成功将DataGridView绑定了2个表,而且不用DataTable做中间层。关键就在:

DataSource                                      //设定要绑定的数据源

DataPropertyName                           //设置更新后回写到数据库的哪一列,多表时要把数据源也写上

DisplayMember                                 //设置要显示在DataGridView的字段

ValueMember                                   //设置对应DisplayMember的实际值的字段

这几个属性上。

在更新回数据源时还有一点要注意,就是绑定数据源时一定要有主键,这样你只要设置SqlDataAdapter中的SelectCommand属性,其余的UpdateCommand、DeleteCommand、InsertCommand属性就会自动设置、并完成相应的功能:

            try
            {
               da.Update(ds.Tables[0].GetChanges());
               MessageBox.Show("数据处理成功!");
               ds.Tables[0].AcceptChanges();
            }
            catch (Exception Error)
            {
                MessageBox.Show(Error.Message,);
            }

举一反三、能成功绑定2个表,也一样可以绑定多个表

转载于:https://www.cnblogs.com/hulang/archive/2011/04/07/2008213.html

SunnyUI.Net 是基于.Net Framework 4.0+、.Net Core3.1、.Net 5 框架的 C# WinForm 开源控件库、工具类库、扩展类库、多页面开发框架。 源码编译环境:VS2019 16.8+,.Net5,.Net Core3.1 动态库应用环境:VS2010及以上,.Net Framework 4.0及以上(不包括.Net Framework 4 Client Profile),.Net Core 3.1,.Net 5.0 推荐通过Nuget安装:Install-Package SunnyUI,或者通过Nuget搜索SunnyUI安装。 软件介绍: 1、开源控件库 基于.Net Framework4.0,原生控件开发,参考 Element主题风格,包含 按钮、编辑框、下拉框、数据表格、工控仪表、统计图表在内的常用控件超过 50 个,满足常规开发需求,每个控件都精雕细琢,注重细节; 包含 Element 风格主题 11 个,其他主题 6 个,包含主题管理组件 UIStyleManager,可自由切换主题。 2、工具库 收集整理开发过程中经常用到的工具类库。 3、扩展库 收集整理开发过程中经常用到的扩展类库。 4、多页面框架 参考Element,包括7种常用框架风格,只需几行简单的代码即可创建多页面程序,其支撑组件包括UIForm,UIPage,UIFrame,集合常用控件库即可快速开发WinForm应用程序。 SunnyUI.Net开发框架 更新日志: v3.0.2 UIMarkLabel:增加带颜色标签的Label UIRoundProcess:圆形滚动条 UIBreadcrumb:增加面包屑导航 UILedLabel:增加Led标签 UIHeaderButton:在工具箱中显示 UILineChart:支持拖拽选取放大 UIDateTimePicker:修复下拉选择日期后关闭的Bug UINavMenu:增加设置二级菜单底色 UIColorPicker:增加单击事件以选中颜色 UITitlePage:增加ShowTitle可控制是否显示标题 UINavBar:增加可设置背景图片 框架增加IFrame接口,方便页面跳转 UIDataGridView修改垂直滚动条和原版一致,并增加翻页方式滚动 UIPagination: 修正因两次查询数量相等而引起的不刷新 UIHeaderButton: 增加字体图标背景时鼠标移上背景色 UITabControl:修改第一个TabPage关不掉的Bug UIDataGridView增加EnterAsTab属性,编辑输入时,用Enter键代替Tab键跳到下一个单元格 UILineChart:增加鼠标框选放大,可多次放大,右键点击恢复一次,双击恢复 UITitlePanel:修复OnMouseMove事件 UITrackBar:增加垂直显示方式 UIFlowLayoutPanel:修改了一处因为其加入控件大小发生变化而引起的滚动条出错。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值