DataGridView绑定数据-修改列值-序号列-交换列顺序

来源:互联网 发布:mac运行exe 编辑:程序博客网 时间:2024/06/05 10:17

 一、 DataGridView控件的用法(如何绑定、修改其中某一列值、添加序号列、交换任意2列显示顺序)

1. DataGridView绑定数据源。

        DataGridView可以由2种方式来显示数据库中的某张表的数据。第一种方法是利用控件自带的绑定数据源功能(就是在页面上拖放一个DataGridView控件,其右上角会出来一个三角形,点三角形就可以对该DataGridView要显示的哪个表哪些列数据进行设置),根据提示一步步设置好数据源并选择需要显示出来的列,还可以在属性里面设置该DataGridView表格的样式,此法简单快捷,但个人感觉可控性不好,环境自己生成很多东西,后面想调整哪里不好找,比如直接绑定数据库的表显示的是该表中的所有数据,不好进行条件过滤(即不能自己写SQL语句),很多时候我们需要的是满足一定条件的记录(我们希望自己写SQL语句),而不是所有记录(好像可以通过设置过滤器等来解决这以问题)。因此我选用第二种方法,就是自己写代码来控制DataGridView控件,包括写SQL语句查询某些记录,用DataSet装载查询记录,然后用DataSet中的数据填充DataGridView,设置控件的样式等等,都可以通过人工写代码实现,比第一种方法灵活,代码透明自己有数,尽量少用控件,代码看起来更连贯。下面针对第二种方法显示数据库表中的数据进行阐述:

在页面上拖放一个DataGridView控件,Name属性设为UserdataGridView,在对应的cs文件里写SQL读取数据库中USER表中的数据,并绑定到 UserdataGridView 显示,代码如下:

1//连接数据库读取数据,为UserdataGridView赋值。
2String strConn = "server= .\XWPC_DATABASE;uid=数据库用户名;pwd=数据库密码;database=数据库名";
3SqlConnection conn = new SqlConnection(strConn);
4String sqlId = "select * from [USER] ";
5conn.Open();
6SqlCommand cmd = new SqlCommand(sqlId, conn);
7SqlDataAdapter da = new SqlDataAdapter(cmd);
8 
9DataSet ds = new DataSet();
10da.Fill(ds, "USER");
11 
12UserdataGridView.DataSource = ds;
13UserdataGridView.DataMember = "USER";
14 
15conn.Close();

上述代码执行后页面上数据显示是这样的:


2. 修改 UserdataGridView中数据的表头(本来默认是数据库中的字段名)。
1//改变UserdataGridView的表头
2UserdataGridView.Columns[1].HeaderText = "用户名";
3 
4//设置该列宽度
5UserdataGridView.Columns[1].Width = 70;
3. 将UserdataGridView最前面一列编号改为从1开始依次增加的序号(默认的字段编号对用户没意义,而且不连续)。

 

1//在表前面加一列表示序号
2UserdataGridView.Columns[0].HeaderText = "编号";
3UserdataGridView.Columns[0].Width = 60;
4//自动整理序列号
5int coun = UserdataGridView.RowCount;
6for (int i = 0; i < coun - 1; i++){
7    UserdataGridView.Rows[i].Cells[0].Value = i + 1;
8    UserdataGridView.Rows[i].Cells["USER_ID"].Value = i + 1;
9}         
10 
11//改变UserdataGridView的表头
12UserdataGridView.Columns[1].HeaderText = "用户名";
13//设置该列宽度
14UserdataGridView.Columns[1].Width = 70;
15 
16UserdataGridView.Columns[2].HeaderText = "密码";
17UserdataGridView.Columns[2].Width = 70;
18 
19//默认按顺序每列UserdataGridView依次从ds中对应赋值
20UserdataGridView.Columns[0].DataPropertyName = ds.Tables[0].Columns[0].ToString();
21 
22conn.Close();

执行后效果如下:


4. 对调 DataGridView中某两列的顺序,代码如下:
1//改变UserdataGridView的表头
2UserdataGridView.Columns[1].HeaderText = "密码";
3//设置该列宽度
4UserdataGridView.Columns[1].Width = 70;
5UserdataGridView.Columns[1].DataPropertyName = ds.Tables[0].Columns[2].ToString();
6 
7UserdataGridView.Columns[2].HeaderText = "用户名";
8UserdataGridView.Columns[2].Width = 70;
9UserdataGridView.Columns[2].DataPropertyName = ds.Tables[0].Columns[1].ToString();           
10 
11conn.Close();

执行效果:



5. 设置DataGridView使某列不显示、使其不可直接编辑、使其不显示最后一行空白。
1//不显示出dataGridView的最后一行空白
2UserdataGridView.AllowUserToAddRows = false;
3 
4//不允许在列表上直接编辑
5UserdataGridView.ReadOnly = true;
6 
7//数据库表中第十列数据不显示在表格中
8UserdataGridView.Columns[9].Visible = false;
6. 将从 下拉列表ComboBox中选择存入数据库中的数据1,2…转换为对应字符串显示给用户(比如用户角色在数据库中1为管理员,2为会员,3为最终用 户,那么DataGridView列表中应该显示管理员/会员/最终用户而不是显示1/2/3这样的数字)。CheckBox也是同理(比如性别1为 男,0为女,我们需要显示男/女而不是1/0)。

    这个问题可以在数据从DataSet绑定到DataGridView之前对DataSet中数据进行遍历一次,将该字段修改后再存入DataSet,然后再绑定到DataGridView,此法耗时,数据记录多的情况延迟非常明显。所以一般采用CellFormatting事件来完成该任务,因为DataGridView.CellFormatting事件在每绘制一个单元格时,就会发生一次,这样就可以在显示列表时修改这个单元格的显示内容。当然,也正因为每绘制一个单元格都触发CellFormatting事件, 所以处理此事件时应避免时间过长。另外,在检索单元格FormattedValue或调用其GetFormattedValue方法时,此事件也会发生。 网上也有少数人说该事件不建议使用,因为这个事件稍不注意就经常被触发而更新表格,比如排序时候也被触发,目前我没发现这个问题,也可能是我数据比较少 吧。实际上该事件被普遍用于帮助用户实现自定义单元格样式,比如改变背景颜色、高亮显示某行等。废话不说了,用CellFormatting事件实现修改DataGridView中某列的值代码如下:(在设计器中UserdataGridView的属性栏–切换到事件栏–找到CellFormatting事件,双击进入该事件函数体写如下 代码 。 )

方法一:

1private void UserdataGridView_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) {
2    if (e == null || e.Value == null || !(sender is DataGridView))
3        return;
4 
5    DataGridView view = (DataGridView)sender;           
6 
7    try {
8        if (view.Columns[e.ColumnIndex].DataPropertyName == "USER_ROLEID") {
9            int val = Convert.ToInt32(e.Value);
10            switch (val) {
11                case 1:
12                    e.Value = "管理员";
13                    break;
14                case 2:
15                    e.Value = "会员";
16                    break;
17                case 3:
18                    e.Value = "最终客户";
19                    break;
20                default:
21                    break;
22            }
23            e.FormattingApplied = true;
24        }
25    }
26    catch (System.Exception ex) {
27        e.FormattingApplied = false;
28        MessageBox.Show(ex.ToString());
29    }
30}

方法二:

view source
print?
1private void UserdataGridView_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) {
2    try {
3        //&ldquo;USER_ROLEID&rdquo;这列在数据库中对应第5列,角标是4
4        if (e.ColumnIndex == 4) {
5            int val = Convert.ToInt32(e.Value);
6            switch (val) {
7                case 1:
8                    e.Value = "管理员";
9                    break;
10                case 3:
11                    e.Value = "会员";
12                    break;
13                case 5:
14                    e.Value = "最终客户";
15                    break;
16                default:
17                    break;
18            }
19            e.FormattingApplied = true;
20        }
21    }
22    catch (System.Exception ex)  {
23        e.FormattingApplied = false;
24        MessageBox.Show(ex.ToString());
25    }
26}

以上两种方法都测试通过,结果一样,执行后效果如下:



原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 08vip不给提现了怎么办 点击订阅号所收到内容字太大怎么办 我的小叶栀子花老是黄叶该怎么办? 联币金融倒闭了我投资的钱怎么办 新单位交养老保险不接收档案怎么办 高铁发车十小时没赶上怎么办 饿了么被阿里收购员工怎么办? 爱疯4s密码忘了怎么办 研究生论文盲审一直不出结果怎么办 查重报告有疑似剽窃观点怎么办 成绩考的不好怎么办读技校有用吗 孩子大学挂科太多家长应该怎么办 中专升大专的入学考没考上怎么办 小孩摔跤额头出了个包怎么办 小孩摔跤后脑勺出了个包怎么办 结婚后疏于关心老婆寒心了怎么办 江苏取消小高考高二学生怎么办 上海学而思家长陪读听不懂怎么办 高考报名的电话号码填错了怎么办 高考报名用的电话号码变换了怎么办 弟媳妇一个月就大闹一次怎么办 丈夫出轨我亲弟媳妇我怎么办 被山西博大泌尿医院坑了怎么办 家长反应孩子学校受欺负老师怎么办 白色衣服和牛仔裤洗变色了怎么办 生完孩子肚子上的松皮怎么办 xp电脑玩cf进入地图黑屏怎么办 爸妈吵架妈妈走了爸爸哭了该怎么办 总担心旅馆被拍视频传上网怎么办 微博买了猜冠军现在停了怎么办 脸上毛孔大有黑头怎么办小窍门去 进去精神病院出来真的疯了怎么办 房子已过户新业主不交物业费怎么办 村委会欠百姓征地补偿款不给怎么办 因为近亲人人都不看好的婚姻怎么办 碰到工作中特别积极的同事怎么办 丈夫车祸死亡妻子和孩子以后怎么办 丈夫死后妻子改嫁儿子不同意怎么办 满了60岁社保没满15年怎么办 捷豹的dpf灯亮了怎么办 朋友如新直销产品是你该怎么办