您的位置:首页 > 数据库

DataGridView控件用法---绑定数据

2016-12-01 15:28 363 查看


今天接触了下DataGridView控件,查到如下资料,自己保留份


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

1. DataGridView绑定数据源。

 在页面上拖放一个DataGridView控件

//连接数据库读取数据,为DataGridView赋值。

String strConn = "server= .\XWPC_DATABASE;uid=数据库用户名;pwd=数据库密码;database=数据库名";

SqlConnection conn = new SqlConnection(strConn);
String sqlId = "select * from [USER] ";
conn.Open();
SqlCommand cmd = new SqlCommand(sqlId, conn);
SqlDataAdapter da = new SqlDataAdapter(cmd);

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

DataGridView.DataSource = ds;
DataGridView.DataMember = "USER";

conn.Close();

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



2.
修改 DataGridView中数据的表头(本来默认是数据库中的字段名)。


//改变DataGridView的表头
DataGridView.Columns[1].HeaderText = "用户名";

//设置该列宽度
DataGridView.Columns[1].Width = 70;

3. 将DataGridView最前面一列编号改为从1开始依次增加的序号(默认的字段编号对用户没意义,而且不连续)。

//在表前面加一列表示序号
DataGridView.Columns[0].HeaderText = "编号";
DataGridView.Columns[0].Width = 60;
//自动整理序列号
int coun = DataGridView.RowCount;
for (int i = 0; i < coun - 1; i++){
   DataGridView.Rows[i].Cells[0].Value = i + 1;
   DataGridView.Rows[i].Cells["USER_ID"].Value = i + 1;
}         

//改变DataGridView的表头
DataGridView.Columns[1].HeaderText = "用户名";
//设置该列宽度
DataGridView.Columns[1].Width = 70;

DataGridView.Columns[2].HeaderText = "密码";
DataGridView.Columns[2].Width = 70;

//默认按顺序每列DataGridView依次从ds中对应赋值
DataGridView.Columns[0].DataPropertyName = ds.Tables[0].Columns[0].ToString();

执行后效果如下:



4. 对调 DataGridView中某两列的顺序,代码如下:

 //改变DataGridView的表头
DataGridView.Columns[1].HeaderText = "密码";

//设置该列宽度
DataGridView.Columns[1].Width = 70;
DataGridView.Columns[1].DataPropertyName = ds.Tables[0].Columns[2].ToString();

DataGridView.Columns[2].HeaderText = "用户名";
DataGridView.Columns[2].Width = 70;
DataGridView.Columns[2].DataPropertyName = ds.Tables[0].Columns[1].ToString();   

执行效果:




5. 设置DataGridView使某列不显示、使其不可直接编辑、使其不显示最后一行空白。

 
//不显示出dataGridView的最后一行空白
 
DataGridView.AllowUserToAddRows = 
false
;
 
//不允许在列表上直接编辑
 
DataGridView.ReadOnly = 
true
;
 
//数据库表中第十列数据不显示在表格中
 
DataGridView.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中某列的值代码如下:(在设计器中DataGridView的属性栏–切换到事件栏–找到CellFormatting事件,双击进入该事件函数体写如下 代码 。 )


方法一:

1
private
 
void
  
DataGridView_CellFormatting(
object
 
sender, DataGridViewCellFormattingEventArgs
e) {
2
    
if
 
(e == 
null
 
|| e.Value == 
null
 
||
!(sender 
is
 
DataGridView))
3
        
return
;
5
    
DataGridView view = (DataGridView)sender;           
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
  
DataGridView_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
}
以上两种方法都测试通过,结果一样,执行后效果如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息