《DataGridView知识点.docx》由会员分享,可在线阅读,更多相关《DataGridView知识点.docx(17页珍藏版)》请在第一文库网上搜索。
1、第24课Ado.Net技术(下)DataGridView知识点一、DataGridView单元格验证比如只允许输入数字要求:验证错误后焦点不离开。有两种方法:DataGridView.EditingContro1Showing事件和DataGridView.Ce11Va1idating事件。(1) DataGridView.EditingContro1Showing事件。程序集:System.Windows.Forms(在system,windows,forms,d11中)。如:voiddgvCs_EditingContro1Showing(objectsender,1)ai(1ric1Vie
2、w11iiContro1ShowingEvent,1re)e.Ce11Sty1e.BackCo1or=COIOr.Aquamarine;设置编译时的颜色contro1=newTextBoxO;contro1=(TcxtBox)e.Contro1;contro1.KeyPress+=newKcyPrcssEvcntHand1er(txt_KeyPress);/然后在txtKeyPress这里进行验证。(2) DataGridView.Ce11Va1idating事件。在单元格失去输入焦点时发生,并启用内容验证功能。命名空间:System.Windows.Form,程序集:System.Windo
3、ws.Forms(在System.Windows.Forms,d11中)备注:验证不通过时调用e.Cance1二true,终止事件链,单元格将保持编辑状态。调用dgvdetai1s.Cance1EditO;可以使单元格的内容会滚到修改前的值。使用System.Windows.Forms.SendKeys.SeneI(a);将全选单元格的内容。如:voiddgv_Ce1!Va1idating(objectsender,DataGridViewCc1IVaIidatingEventArgse)decima1tmp=O.Om:if(!decima1.TryParse(e.FormattedVa1ue
4、.ToStringO,OUttmp)/是否是数字(if(e.FormattedVa1ue!=nu11&e.FormattedVa1ue.ToStringO.1ength!=O)(DevComponents.DotNetBar.MessageBox1A.ShoW(请输入有效数字!提示);e.Cance1=true;)这两种方法都能验证。第一种方法当按键按下时(即当编译时)就去验证,而第二种方法是当焦点离开单元格编译区域时触发。所以个人感觉第一种方法更优一点。二、指定选中单元格并开始编辑状态实现:获得焦点DataGridView.FocusO;指定当前单元格DataGridView.Current
5、Ce11=dgv_detai1sO,0;中对应参数为列索引(或列标题)、行索引。(注意:不是默认的先行索引)开始编辑状态dDataGridView.BeginEdit(fa1se);fa1se是指对指定行进行编辑。DataGridView.BeginEdit方法尝试将网格置于允许编辑的状态。命名空间:程序集:System.Windows.Forms(在System.Windows.Forms,d11中)三、在拖动列的滚动条时可以将指定的列冻结。this.dataGridView1.Co1umnszzAddToCartButtonzz.Frozen=true;说明:中括号(口)中指相应列的索引或
6、者相应列的标题这个知道了后一看就应该明白,无需多加解释。四、DataGridVieW选择的部分拷贝至剪贴板。拷贝模式设定DataGridView1.C1ipboardCopyMode=DataGridViewC1ipboardCopyMode.Enab1eWithoutHeaderText设置可复制的模式其中DataGridVieW.C1ipboardCopyMode属性获取或设置一个值,该值指示用户是否可以将单元格的文本值复制到C1ipboard,以及是否包括行标题和列标题文本。命名空间:程序集:System.Windows.Forms(在System.Windows.Forms.d11中)
7、选中部分拷贝C1ipboard.SetDataObject(DataGridView1.GetC1ipboardContent()将控件选中的数据置于系统剪贴板中DataGridView粘贴代码if(DataGridView1.CurrentCe11.Va1ue=nu11)(return;)intInsertRowIndex=DataGridView1.CurrentCe11.Rowindex;stringpasteText=C1ipboard.GetTextO;从系统剪贴板中获取数据if(string.IsNu11OrEmpty(pasteText)return;)string1ines=p
8、asteText.Sp1it(,r,);按行分组boo1isHeader=true;foreach(string1inein1ines)(if(isHeader)(isHeader=fa1se;当可复制模式中含有标题时的过滤操作)e1se(stringva1s=1ine.Sp1it(,t,);按tab空格分组if(va1s.1ength-1!=DataGridView1Co1umnCount)(thrownewAPP1iCationEXCePtion(列数错误);)DataGridViewRowrow=DataGridView1.RowsCinsertRowIndex;row.HeaderCe
9、11.Va1ue=va1sO;for(inti=0;irow.Ce11s.Count-I;i+)(row.Ce1Isi.Va1ue=va1s(i+1);)insertRowIndex+=1;)五、DatagridVieW自动编号代码自动编号与数据库无关,dataGridView1.RowHeadersWidth-4,e.RowBounds.Height);TextRenderer.DrawText(e.Graphics,(e.RowIndex+1).ToStringO,dataGridView1.RowHeadersDefau1tCe11Sty1e.Font,rectang1e,dataGri
10、dView1.RowHeadersDefau1tCeI1Sty1e.ForeCo1or,TextFormatF1ags.Vertica1CenterTextFormatF1ags.Right);)显示行号六、指定单元格属性远期合约IF1O11IF1012近期合约监控价差目标收益率用户设置监控价差目标收益率用户设置IF1O11Q200.016101,808IF10120450.015808IF11030500.016808400.02101;808IF11060080800808DataGric1ViewCe11dgce11=newDataGridViewTextBoxCe11();申明单元格类
11、型this.dgvCss.Rowsi.Ce11sk=dgce11;其实很简单,只是很多人不知道有这个属性。但这种方式和带有复选框类型的单元格使用时,一般情况下出错,也给一些人一种错觉以为单元格类型不能这么操作。其实是因为你在申明列的时候先申明的CheCkbOX类型的,而这时他们便有一个默认值(Formattec1Va1ue)fa1se,当你重新给他赋值单元格类型时便会出现FOrnIattedVa1Ue错误,这时你只需给它一个默认值就可以,如this.dgvCss.Rowsi.Ce11sk.Va1ue=这样便可解决。知识点:一:DatagridView导出数据到EXCeI(两种方法)二:Data
12、gridView中显示密码列三:WinForm最简单两GridView同步滚动四:DataGridvieW添加任何控件DatagridView导出数据到Exce1有两种方法:一种是直接利用I/O读写去生成非标准格式的X1s文件,速度很快。另外种就是直接使用EXCE1的COM组件实现,需要在项目中引用EXCE1的COM组件。代码利用I0o1718try1920(myStream=SaveFi1eDia1og-OpenFi1eO;2122catch23(24return;252627/StreamWritersw=newStreamWriter(myStream,System.Text.Encod
13、ing.GetEncoding(ugb2312u);28StreamWritersw=newStreamWriter(myStream,System.Text.Encoding.GetEncoding(-0);2930stringstr=,*;try31(32/写标题33t;i+)for(inti=0;i0)(str+=ut;)str+=DataGridView1.Co1umnsi.HeaderText;)424344sw.Write1ine(str);/写内容4546for(intj=0;jDataGridView1.Rows.Count;j+)(4748stringtempStr=,;49
14、t;k+)for(intk=0;k0)(tempStr+=t;545556tempStr+=DataGridView1.Rowsj.Ce11sk.Va1ue.ToString();5758 59 sw.Write1ine(tempStr);60 )61 sw.C1ose();62 myStream.C1ose();63 )64 catch(Exceptionex)65 66 MessageBox.Show(ex.ToString();67 68 fina11y69 70 sw.C1ose();71 myStream.C1ose();72 )73 /System.Diagnostics.StopwatchswT=newSystem.Diagnosties.Stopwatch();74 /swT.Start();