操作DataGridView控件详解.docx
- 文档编号:6810582
- 上传时间:2023-05-10
- 格式:DOCX
- 页数:16
- 大小:119.60KB
操作DataGridView控件详解.docx
《操作DataGridView控件详解.docx》由会员分享,可在线阅读,更多相关《操作DataGridView控件详解.docx(16页珍藏版)》请在冰点文库上搜索。
操作DataGridView控件详解
在项目中,老程序员都知道显示数据的控件的操作灵活性很重要。
VisualStudio2008里面提供了一个很强大的数据显示控件------------DataGridView。
DataGridView与VB、VC中的DataGrid控件功能很相似,但比起更加强大,操作更灵活,废话不说了。
操作DataGridView有两种方式,一种是使用控件绑定的方式,操作的时候只要更改DataSet控件的数据集就能够实现DataGridView数据的灵活显示;另一种方式是全部使用代码来手工操作DataGridView控件的显示,尽量少用控件,使代码看起来更连贯,操作更灵活。
控件方法来操作DataGridView控件:
(控件方法略,比较简单,拖控件,绑定即可)
代码方法来操作DataGridView控件
通过上两节,老程序员对数据的简单操作已经很熟练了。
现在在第一个实例“helloword!
”的基础上,继续DataGridView控件的手工操作实习。
添加一个控件,文本命名如图:
我们在上面看到的数据显示时这样的:
列的头部是数据库表的列段名,因为我们是将SQL查询的数据集直接绑定到DataGridView控件的。
下来我们来改变它的头部,同时,来指定DataGridView控件各个列绑定的数据成员。
privatevoidbutton4_Click(objectsender,EventArgse)
{
//定义数据库连接字符
stringstr_con=@"DataSource=26-3B72903E783B\SQLEXPRESS;IntegratedSecurity=SSPI;InitialCatalog=testDB;";
//定义SQL语句字符串
stringsql="select*fromdanwei";
//stringsql=string.Format("insertintodanwei(danwei)values('{0}')",textBox1.Text);
//定义并实例化数据库连接类型变量
SqlConnectionconn=newSqlConnection(str_con);
//打开数据库连接
conn.Open();
SqlCommandcomm=newSqlCommand(sql,conn);
SqlDataAdapterda=newSqlDataAdapter(comm);
DataSetds=newDataSet();
da.Fill(ds,"danwei");
dataGridView1.DataSource=ds;
dataGridView1.DataMember="danwei";
//---------------以上代码可以直接拷贝button3的代码--------------------
//设置dataGridView1控件第一列的列头文字
dataGridView1.Columns[0].HeaderText="序号";
//设置dataGridView1控件第一列的列宽
dataGridView1.Columns[0].Width=80;
//设置dataGridView1控件第二列的列头文字
dataGridView1.Columns[1].HeaderText="单位";
//设置dataGridView1控件第二列绑定的数据集中第一个数据表的第二列的数据
//前面说了,ds数据集是一个多表的集合
dataGridView1.Columns[1].DataPropertyName=ds.Tables[0].Columns[1].ToString();
//设置dataGridView1控件第二列的列宽
dataGridView1.Columns[1].Width=300;
conn.Close();
}
运行后,按下DataGridViewOpar按钮显示如下:
比较原来的;
发现就是列头变了,以及下面的滚动条长了,其实数据绑定了。
可以将绑定值在代码中互换一下,再看看;
上面代码改为:
privatevoidbutton4_Click(objectsender,EventArgse)
{
….//省略前面已有的代码
dataGridView1.Columns[0].HeaderText="序号";
dataGridView1.Columns[0].DataPropertyName=ds.Tables[0].Columns[1].ToString();
dataGridView1.Columns[0].Width=80;
dataGridView1.Columns[1].HeaderText="单位";
dataGridView1.Columns[1].DataPropertyName=ds.Tables[0].Columns[0].ToString();
dataGridView1.Columns[1].Width=300;
}
运行后:
单位和序号的值就换位置了。
自动添加序号:
动态添加数据的时候,有时候读取数据库的数据ID号不是顺序的,这时就需要自己添加自动递增的序号。
如图:
这里的序号不是序列的,中间跳了个2,做为统计到底有几个单位不直观。
我们添加一段代码:
privatevoidbutton4_Click(objectsender,EventArgse)
{
….//省略前面已有的代码
dataGridView1.Columns[0].HeaderText="序号";
//dataGridView1.Columns[0].DataPropertyName=ds.Tables[0].Columns[1].ToString();
dataGridView1.Columns[0].Width=80;
dataGridView1.Columns[1].HeaderText="单位";
//dataGridView1.Columns[1].DataPropertyName=ds.Tables[0].Columns[0].ToString();
//dataGridView1.Columns[1].Width=300;
//自动整理序列号
intcoun=dataGridView1.RowCount;
for(inti=0;i { dataGridView1.Rows[i].Cells[0].Value=i+1; dataGridView1.Rows[i].Cells["danweiid"].Value=i+1; } //因为第一个列值被修改了,所以后面的列值索引就从0开始 //所以单位的值应该对应的是第0列 dataGridView1.Columns[0].DataPropertyName=ds.Tables[0].Columns[0].ToString(); } 运行后,显示: 综上,老程序员已经可以知道: 1, DataGridView控件如何用代码绑定数据集; 2, DataGridView控件如何如果将指定的列绑定到数据集里的指定数据列; 3, DataGridView控件如何动态编辑它的列值; 其实通过上面的实习,老程序员已经算很灵活的操作DataGridView了,不过为了在项目中更加顺手,老程序员通过查找资料和测试,整理了DataGridView控件的用法详解合集。 附录如下: (以下代码在如下情况下配置: 添加一个ListBox控件,在里面显示获取到的值。 添加一个button3按钮控件,以下功能代码均在该按钮控件的Click事件下触发) 1,当前选择的的单元格属性取得、变更 privatevoidbutton3_Click(objectsender,EventArgse) { //当前选择的的单元格属性取得、变更 listBox1.Items.Add("当前选择的表格值(代码: dataGridView1.CurrentCell.Value)="+dataGridView1.CurrentCell.Value); listBox1.Items.Add("当前选择的表格值(代码: dataGridView1.CurrentCell.ColumnIndex)="+dataGridView1.CurrentCell.ColumnIndex); listBox1.Items.Add("当前选择的表格值(代码: dataGridView1.CurrentCell.RowIndex)="+dataGridView1.CurrentCell.RowIndex); //设置[1,1]单元格为当前选择的单元格 dataGridView1.CurrentCell=dataGridView1[1,1]; listBox1.Items.Add("当前选择的表格值(代码: dataGridView1.CurrentCell.RowIndex)="+dataGridView1.CurrentCell); } 运行时,需要先按DataGridViewOpar,它会创建DataGridView数据视图实例,然后再按DataGridViewOparGather按钮。 2,DataGridView编辑属性 //全部单元格只读 dataGridView1.ReadOnly=true; //指定行列单元格只读 dataGridView1.Columns[1].ReadOnly=true; dataGridView1.Rows[2].ReadOnly=true; dataGridView1[0,0].ReadOnly=true; //编辑指定单元格 privatevoiddataGridView1_CellBeginEdit(objectsender, DataGridViewCellCancelEventArgse) { stringmsg=String.Format("编辑表格({0},{1})", e.ColumnIndex,e.RowIndex); this.Text=msg; } privatevoiddataGridView1_CellEndEdit(objectsender, DataGridViewCellEventArgse) { stringmsg=String.Format("完成编辑({0},{1})", e.ColumnIndex,e.RowIndex); this.Text=msg; } 3,DataGridView禁止用户追加新行 dataGridView1.AllowUserToAddRows=false; 4,判断当前选中行是否为新追加的行 if(dataGridView1.CurrentRow.IsNewRow=true) { MessageBox.Show("你选定的是新行"); } 5,DataGridView设定删除行 //允许用户删除行操作 dataGridView1.AllowUserToDeleteRows=true; //双击DataGridView属性框中事件列表中的以下两个事件,添加代码如下 //提示是否删除指定行数据 privatevoiddataGridView1_UserDeletingRow(objectsender,DataGridViewRowCancelEventArgse) { DialogResultdiaR=MessageBox.Show("是否删除该行? ","确认",MessageBoxButtons.OKCancel,MessageBoxIcon.Question); if(diaR==DialogResult.OK) { e.Cancel=false; } } //提示删除了哪一行数据 privatevoiddataGridView1_UserDeletedRow(objectsender,DataGridViewRowEventArgse) { System.Text.StringBuildermessageBoxCS=newSystem.Text.StringBuilder(); messageBoxCS.AppendFormat("{0}={1}","行号为",e.Row); messageBoxCS.AppendLine(); DialogResultdiaR=MessageBox.Show("删除了"+messageBoxCS.ToString(),"确认"); } 6,设置不显示指定行,设置删除选定的行或列 //显示指定行或列 dataGridView1.Columns[0].Visible=false; dataGridView1.Rows[0].Visible=false; dataGridView1.ColumnHeadersVisible=false; dataGridView1.RowHeadersVisible=false; //删除指定行 dataGridView1.Columns.Remove("danwei"); dataGridView1.Columns.RemoveAt(0); dataGridView1.Rows.RemoveAt(0); //删除选定的多行 foreach(DataGridViewRowrindataGridView1.SelectedRows) { if(r.IsNewRow==false) { dataGridView1.Rows.Remove(r); } } 7,取得选定的行、列、单元格 //选定的单元格 foreach(DataGridViewCellcindataGridView1.SelectedCells) { stringcr=string.Format("{0},{1}",c.ColumnIndex,c.RowIndex); listBox1.Items.Add("选定的单元格位置是: "+cr); } //选定的行/列 foreach(DataGridViewRowcindataGridView1.SelectedRows) { listBox1.Items.Add("选定的行是: "+c.RowIndex); } foreach(DataGridViewColumncindataGridView1.SelectedColumns) { listBox1.Items.Add("选定的列是: "+c.ColumnIndex); } //指定选定单元格 dataGridView1[0,0].Selected=true; dataGridView1.Rows[0].Selected=true; dataGridView1.Columns[0].Selected=true; //设置行首和左上角的文字 dataGridView1.Rows[0].HeaderCell.Value="第1行"; dataGridView1.TopLeftHeaderCell.Value="左上角"; 8,手动追加列 //手动追加列 dataGridView1.AutoGenerateColumns=false; dataGridView1.DataSource=ds; DataGridViewTextBoxColumntxtCol=newDataGridViewTextBoxColumn(); txtCol.DataPropertyName="danwei"; txtCol.Name="col1"; txtCol.HeaderText="单位"; dataGridView1.Columns.Add(txtCol); 9,单元格内输入值正确性判断 在DataGridView控件的属性处,选择以下事件。 错误文本请求: privatevoiddataGridView1_CellErrorTextNeeded(objectsender,DataGridViewCellErrorTextNeededEventArgse) { if((dataGridView1.Columns[e.ColumnIndex].Name=="ID")&&(dataGridView1.Columns["ID"].ToString()=="")) { dataGridView1.Rows[e.RowIndex].ErrorText="值类型错误"; } } 输入值有效性检查: privatevoiddataGridView1_CellValidated(objectsender,DataGridViewCellEventArgse) { dataGridView1.Rows[e.RowIndex].ErrorText="输入值无效"; } 10,列中显示选择框控件CheckBox //列中显示选择框CheckBox DataGridViewCheckBoxColumncolumn1=newDataGridViewCheckBoxColumn(); { column1.HeaderText="选择框"; column1.Name="checkbox"; column1.AutoSizeMode= DataGridViewAutoSizeColumnMode.DisplayedCells; column1.FlatStyle=FlatStyle.Standard; //显示选择框的三种状态 column1.ThreeState=true; } dataGridView1.Columns.Add(column1); 11,插入新的一列到指定单元格列 //插入新的一列到指定单元格列 dataGridView1.Columns.Insert(3,column1); 12,单元格添加下拉框 //单元格添加下拉框 DataGridViewComboBoxColumndcombo=newDataGridViewComboBoxColumn(); dcombo.Items.Add("中国"); dcombo.Items.Add("美国"); dcombo.Items.Add("德国"); dcombo.Items.Add("日本"); dcombo.Items.Add("英国"); dcombo.Items.Add("法国"); dcombo.Name="combo"; //显示的位置列 //dcombo.DisplayIndex=1; dcombo.HeaderText="国家"; //绑定数据库的值时使用以下属性 //dcombo.DataPropertyName="danwei"; dataGridView1.Columns.Add(dcombo); 以上显示的下拉框,选择时需要点击三次,第一次选中单元格,第二次启用编辑,第三次打开下拉框。 如果需要一次点击打开下拉框,可以启用DataGridView的事件CellEnter(); 代码如下: privatevoiddataGridView1_CellEnter(objectsender,DataGridViewCellEventArgse) { //实现单击显示列表框 if(dataGridView1.Columns[e.ColumnIndex]isDataGridViewComboBoxColumn&&e.RowIndex! =-1) { SendKeys.Send("{F4}"); } } 13,单元格显示按钮控件和显示超级链接 同上,只不过使用的类为: DataGridViewButtonColumndbotton; 相关代码: //显示按钮控件 DataGridViewButtonColumncol=newDataGridViewButtonColumn(); col.Name="Button"; col.UseColumnTextForButtonValue=true; col.Text="按钮"; dataGridView1.Columns.Add(col); 触发的事件为: privatevoiddataGridView1_CellContentClick(objectsender,DataGridViewCellEventArgse) { if(dataGridView1.Columns[e.ColumnIndex].Name=="Button") { MessageBox.Show("触发了按钮"); } } 超级链接是: DataGridViewLinkColumn 连接代码同上。 单元格列显示图像的是: DataGridViewImageColumn 代码如下: //显示图像 DataGridViewImageColumndgvI=newDataGridViewImageColumn(); dgvI.Name="Image"; dgvI.ValuesAreIcons=false; dgvI.Image=newBitmap("c: \\windows\\BlueLace16.bmp"); dgvI.ImageLayout=DataGridViewImageCellLayout.Zoom; dgvI.Description="测试的图片"; dataGridView1.Columns.Add(dgvI); dataGridView1["Image",0].Value=newBitmap("c: \\windows\\BlueLace16.bmp"); 等等,用法都是相同的。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作 DataGridView 控件 详解