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赋值。
2
String strConn =
"server= .\XWPC_DATABASE;uid=数据库用户名;pwd=数据库密码;database=数据库名"
;
3
SqlConnection conn =
new
SqlConnection(strConn);
4
String sqlId =
"select * from [USER] "
;
5
conn.Open();
6
SqlCommand cmd =
new
SqlCommand(sqlId, conn);
7
SqlDataAdapter da =
new
SqlDataAdapter(cmd);
8
9
DataSet ds =
new
DataSet();
10
da.Fill(ds,
"USER"
);
11
12
UserdataGridView.DataSource = ds;
13
UserdataGridView.DataMember =
"USER"
;
14
15
conn.Close();
上述代码执行后页面上数据显示是这样的:
2. 修改 UserdataGridView中数据的表头(本来默认是数据库中的字段名)。
1
//改变UserdataGridView的表头
2
UserdataGridView.Columns[1].HeaderText =
"用户名"
;
3
4
//设置该列宽度
5
UserdataGridView.Columns[1].Width = 70;
3. 将UserdataGridView最前面一列编号改为从1开始依次增加的序号(默认的字段编号对用户没意义,而且不连续)。
1
//在表前面加一列表示序号
2
UserdataGridView.Columns[0].HeaderText =
"编号"
;
3
UserdataGridView.Columns[0].Width = 60;
4
//自动整理序列号
5
int
coun = UserdataGridView.RowCount;
6
for
(
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的表头
12
UserdataGridView.Columns[1].HeaderText =
"用户名"
;
13
//设置该列宽度
14
UserdataGridView.Columns[1].Width = 70;
15
16
UserdataGridView.Columns[2].HeaderText =
"密码"
;
17
UserdataGridView.Columns[2].Width = 70;
18
19
//默认按顺序每列UserdataGridView依次从ds中对应赋值
20
UserdataGridView.Columns[0].DataPropertyName = ds.Tables[0].Columns[0].ToString();
21
22
conn.Close();
执行后效果如下:
4. 对调 DataGridView中某两列的顺序,代码如下:
1
//改变UserdataGridView的表头
2
UserdataGridView.Columns[1].HeaderText =
"密码"
;
3
//设置该列宽度
4
UserdataGridView.Columns[1].Width = 70;
5
UserdataGridView.Columns[1].DataPropertyName = ds.Tables[0].Columns[2].ToString();
6
7
UserdataGridView.Columns[2].HeaderText =
"用户名"
;
8
UserdataGridView.Columns[2].Width = 70;
9
UserdataGridView.Columns[2].DataPropertyName = ds.Tables[0].Columns[1].ToString();
10
11
conn.Close();
执行效果:
5. 设置DataGridView使某列不显示、使其不可直接编辑、使其不显示最后一行空白。
1
//不显示出dataGridView的最后一行空白
2
UserdataGridView.AllowUserToAddRows =
false
;
3
4
//不允许在列表上直接编辑
5
UserdataGridView.ReadOnly =
true
;
6
7
//数据库表中第十列数据不显示在表格中
8
UserdataGridView.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事件,双击进入该事件函数体写如下 代码 。 )
方法一:
1
private
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
}
方法二:
1
private
void
UserdataGridView_CellFormatting(
object
sender, DataGridViewCellFormattingEventArgs e) {
2
try
{
3
//“USER_ROLEID”这列在数据库中对应第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
}
以上两种方法都测试通过,结果一样,执行后效果如下:
- DataGridView绑定数据-修改列值-序号列-交换列顺序
- DataGridView控件用法(一)绑定数据-修改列值-序号列-交换列顺序
- DataGridView控件用法(一)绑定数据-修改列值-序号列-交换列顺序
- DataGridView 绑定列顺序
- DataGridView加序号列
- DataGridView加上列序号
- WinForm中DataGridView控件绑定列顺序
- DataGridView绑定数据,同时绑定DataGridViewComboBoxColumn列的值
- 重写DataGridView,添加序号列
- Datagridview绑定指定列
- silverlight 分页,绑定图片列,序号列
- 在DataGridView绑定固定列的数据
- datagridview自定义列的数据绑定
- Repeater控件使用方法(绑定数据、添加序号列)
- 动态绑定DataGridView列类型
- winform datagridview 手动绑定列
- C# 绑定dataGridView列操作
- DataGridVIew数据源绑定指定列
- EF架构~引入规约(Specification)模式,让程序扩展性更强
- C++数据结构和算法每天一练(线性表)
- Tor源码分析十 -- 连接和链路
- 使用spring框架,应用启动时,加载数据
- 如何快速搭建一个Android开发测试平台
- DataGridView绑定数据-修改列值-序号列-交换列顺序
- c++变量在内存中的存储区域
- 记录 -- Android中的Handler总结
- linux练习题大全
- robotium相关代码学习
- jQuery support 源码解读
- 矩阵顺时针螺旋赋值
- nandflash分区
- Javascript DocumentFragment 文档片段