C#winformDataGridView的18种常见属性_第1页
C#winformDataGridView的18种常见属性_第2页
免费预览已结束,剩余9页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、最新资料推荐 最新精品资料整理推荐.更新于二O二 O 年十二月十八日2020年12月18日星期五19:36:31 C# winform DataGridView 的 18 种常见属性 文章分类编程 C# winform DataGridView 属性说明 取得或者修改当前单元格的内容 设定单元格只读 不显示最下面的新行 判断新增行 行的用户删除操作的自定义 行、列的隐藏和删除 禁止列或者行的Resize 列宽和行崗以及列头的高度和行头的宽度的自动调整 冻结列或行 列顺序的调整 行头列头的单元格 剪切板的操作 单元格的ToolTip的设置 右键菜单(ContextMenuStrip)的设置 单元

2、格的边框、网格线样式的设定 单元格衣示值的设定 用户输入时,单元格输入值的设定 设定新加行的默认值 DataGridView取得或者修改当前单元格的内容: 当前单元格指的是DataGridView焦点所在的单元格,它可以通过DataGridView对象的CurrentCell属性取得。如果当前 单元格不存在的时候,返回Nothing(C#是null) /取得当前单元格内容 Console.WriteLine(DataGridView1.CurrentCell.Value); /取得当前单元格的列Index Console.WriteLine(DataGridViewl.CurrentCell.

3、Columnlndex); /取得当前单元格的行Index Console.WriteLine(DataGridView1.CurrentCell.Rowindex); 另外,使用DataGridView.CurrentCellAddress属性(而不是虎接访问单元格来确定单元格所在的 行:DataGridView.CurrentCellAddress.Y 列:DataGridView.CurrentCellAddress.X this.dataGridViewl .RowCount 1) row = 0: this.dataGridViewl .CurrentCell = this.data

4、GridViewl 0. row; /向上遍历 private void butt on 5_Click(object sen der, Eve ntArgs e) int row = this.dataGridViewl .CurrentRow.lndex -1; if (row 0) row = this.dataGridViewl .RowCount 1; this.dataGridViewl .CurrentCell = this.dataGridViewl 0. row; * 注恿:this.dataGridView 的索引器的参数是:columnindex, rowindex 或是

5、 columnName, rowindex 这与习惯不同。 DataGridView设定单元格只i卖: (5-7 最新资料推荐 最新精品资料整理推荐.更新于二O二 O 年十二月十八日2020年12月18日星期五19:36:31 1) 使用Readonly属性 如果希望,DataGridView内所有单元格都不可编辑,那么只要: /设置DataGridView!为只读 DataGridViewl.Readonly = true;此时,用户的新增行操作和删除行操作也被屏蔽了。 如果希望,DataGridView内某个单元格不可编辑,那么只要: /设置DataGridViewl的第2列整列单元格为只

6、读 DataGridViewl.Columns1.Read Only = true; /设置DataGridView 1的第3行整行单元格为只读 DataGridViewl .Rows2.Read Only = true; 设置DataGridView 1的0, 0单元格为只读 DataGridViewl 0, 0.Readonly = true; 2) 使用EditMode属性 DataGridView.EditMode属性被设置为DataGridViewEditMode.EditProgrammatically时, 用户就不能手动编辑单元格的内 容了。但是可以通过程序,调用DataGrid

7、View.BeginEdit方法,使单元格进入编辑模式进行编辑。 DataGridViewl .EditMode = DataGridViewEditMode.EditProgrammatically; 3) 根据条件设定单元格的不可编辑状态 当个个的通过单元格坐标设定单元格Readonly属性的方法太麻烦的时候,你可以通过CellBeginEdit事件来取消单元 格的编辑。 /CellBeginEdit事件处理方法 private void DataGridView1_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e

8、) DataGridView dgv = (DataGridView)sender; 是否可以进行编辑的条件检査 if (dgv.Columnse.Columnlndex.Name = MColumnV & !(bool)dgv,Column2, e.Rowindex.Value) 取消编辑 e.Cancel = true; DataGridView不显示最下面的新行: 通常DataGridView的最下面行是用户新追加的行(行头显示 T。如果不想让用户新追加行即不想显示该新行,可以 将 DataGridView 对象的 AllowUserToAddRows 属性设置为 False /设置用户

9、不能手动给DataGridViewl添加新行 DataGridViewl.AllowUserToAddRows = false; 但是,可以通过程序:DataGridViewRowCollection.Add 为 DataGridView 追加新行。 补足:如果 DataGridView 的 DataSource 绑定的是 DataView,还可以通过设置 DataView.AllowAdd 属性为False来达到同样的效果。 DataGridView判断新增行: DataGridView的AllowUserToAddRows属性为True时也就是允许用户追加新行的场合下,DataGridVi

10、ew的最后行就 是新追加的行(行)。 最新资料推荐 最新精品资料整理推荐.更新于二O二 O 年十二月十八日2020年12月18日星期五19:36:31 使用DataGridViewRow.lsNewRow属性可以判断哪行是新追加的行。另外,通过DataGridView.NewRowIndex可以获 取新行的行序列号. 在没有新行的时候,NewRowIndex =。 DataGridView行的用户删除操作的自定义: 1) 无条件的限制行删除操作。 默认时,DataGridView是允许用户进行行的删除操作的。如果设置DataGridView对象的AllowllserToDeleteRows属性

11、 为False时,用户的行删除操作就被禁止了。 禁止DataGridViewl的行删除操作。 DataGridViewl.AllowllserToDeleteRows = false; 但是,通过DataGridViewRowCollection.Remove还是可以进行行的删除。 补足:如果DataGridView绑定的是DataView的话,通过DataView.AllowDelete也可以控制行的删除。 2) 行删除时的条件判断处理。 用户在删除行的时候,将会引发DataGridView.UserDeletingRow事件。在这个事件里,可以判断条件并取消删除操作。 / DataGrid

12、Viewl 的 UserDeletingRow 事件 private void DataGridViewl_UserDelet泊gRow( object sender, DataGridViewRowCancelEventArgs e) 删除前的用户确认。 if (MessageBox.ShowC1认要删除该行数据吗? ”, ”删除确认”, MessageBoxButtons.OKCancel. MessageBoxIcon.Question) != DialogResult.OK) 如果不是OK,则取消。 e.Ca ncel = true; DataGridView行、列的隐藏和删除: 1)

13、行、列的隐藏 / DataGridViewl 的第列隐藏 最新资料推荐 最新精品资料整理推荐.更新于二O二 O 年十二月十八日2020年12月18日星期五19:36:31 DataGridView1.Columns0.Visible = false; / DataGridViewl 的第-行隐藏 DataGridViewl .Rows0.Visible = false; 2) 行头、列头的隐藏 /列头隐藏 DataGridViewl .Colum nHeadersVisible = false; /行头隐藏 DataGridViewl .RowHeadersVisible = false; 3

14、) 行和列的删除 删除名为-Column!0的列 DataGridViewl .Columns. Remove(” Column*! ”); 删除第 i 列 DataGridViewl.Columns.RemoveAt(O); 删除第一行 DataGridViewl .Rows.RemoveAt(O); 4) 删除选中行 foreach (DataGridViewRow r in DataGridViewl .SelectedRows) if (Ir.lsNewRow) DataGridViewl .Rows.Remove(r); DataGridView禁止列或者行的Resize: 1) 禁

15、止所有的列或者行的Resize /禁止用户改变DataGridViewl的所有列的列宽 DataGridViewl.AllowUserToResizeColumns = false; /禁上用户改变DataGridViewl 0所有行的行高 DataGridViewl.AllowllserToResizeRows = false; 但是可以通过DataGridViewColumn.Width或者DataGridViewRow.Height属性设定列宽和行高。 2) 禁止指定行或者列的Resize /禁止用户改变DataGridView 1的第-列的列宽 DataGridViewl .Colum

16、ns0.Resizable = DataGridViewT riState.False; /禁止用户改变DataGridViewl的第列的行宽 DataGridViewl .Rows0.Resizable = DataGridViewT riState. False: 关于NoSet: 当 Resizable 属性设为 DataGridViewTriState.NotSet 时,实际上会默认以 DataGridView 的 最新资料推荐 最新精品资料整理推荐.更新于二O二 O 年十二月十八日2020年12月18日星期五19:36:31 AllowUserToResizeColumns 和All

17、owllserToResizeRows的属性值进行设定。 比如:DataGridView.AllowUserToResizeColumns = False 且 Resizable 是 NoSet 设定时,Resizable = False 判断 Resizable 是否是继承设定 了 DataGridView 的 AllowUserToResizeColumns 和 AllowUserToResizeRows 的屈性 值, 可以根据State属性判断。如果State属性含有ResizableSet,那么说明没有继承设定。 3) 列宽和行高的最小值的设定 第-列的最小列宽设定为100 DataG

18、ridView1.Columns0.MinimumWidth = 100; 第一行的最小行高设定为50 DataGridViewl .Rows0.MinimumHeight = 50; 4) 禁止用户改变行头的宽度以及列头的高度 禁止用户改变列头的高度 DataGridViewl .Colum nHeadersHeightSizeMode = DataGridViewColum nH eadersHeightSizeMode.DisableResizing; 设置用户改变行头的宽度 DataGridViewl. RowHeadersWidthSizeMode = DataGridViewRow

19、HeadersWidthSizeMode.EnableResizing; DataGridView列宽和行高自动调整的设定: 1) 设定行高和列宽自动调整 /设定包括Header和所有单元格的列宽自动调整 DataGridViewl .AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AIICells; /设定包括Header和所有单元格的行高自动调整 DataGridViewl .AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AIICells; AutoSizeColumnsMode

20、属性的设定值枚举请参照 msdn 的 DataGridViewAutoSizeRowsMode 说明。 2) 指定列或行自动调整 第一列自动调整 DataGridViewl .Columns0.AutoSizeMode = DataGridViewAutoSizeColu mnM ode.DisplayedCells; AutoSizeMode 设定为 NotSet 时,默认继余胸是 DataGridView.AutoSizeColumnsMode 属性。 3) 设定列头的高度和行头的宽度自动调整 /设定列头的宽度可以自由调整 DataGridViewl .Colum nHeadersHeig

21、htSizeMode = DataGridViewColum nH eadersHeightSizeMode. AutoSize; 设定行头的宽度可以自由调整 DataGridViewl. RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.AutoSizeToAIIHeaders; 4) 随时自动调整 a, 临时的,让列宽自动调整,这和指定AutoSizeColumnsMode 性样。 最新资料推荐 最新精品资料整理推荐.更新于二O二 O 年十二月十八日2020年12月18日星期五19:36:31 让DataGridVi

22、ewl的所有列宽自动调整下。 DataGridView1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells); 让DataGridView 1的第列的列宽自动调整一下。 DataGridViewl.AutoResizeColumn(0, DataGridViewAutoSizeColumnMode.AIICells);上而调用的 AutoResizeColumns 和 AutoResizeColumn 当指定的是DataGridViewAutoSizeColumnMode.AIICells的时候,参数可以省略=即: DataG

23、ridViewl.AutoResizeColumn(O)和 DataGridViewl.AutoResizeColumns() b, 临时的,让行高自动调整 让DataGridViewl的所有行高自动调整一下。 DataGridViewl.AutoResizeRows(DataGridViewAutoSizeRowsMode.AllCells); 让DataGridView 1的第-行的行高自动调整一下。 DataGridViewl .AutoResizeRow(Ot DataGridViewAutoSizeRowMode.AllCells);上而调用的 AutoResizeRows 和 Au

24、toResizeRow 当指定的是 DataGridViewAutoSizeRowMode.AIICells 的时候,参数可以省略。即:DataGridViewl.AutoResizeRow (0) 和 DataGridViewl .AutoResizeRows() C,临时的,让行头和列头自动调整 列头高度自动调整 DataGridViewl.AutoResizeColumnHeadersHeight(); 行头宽度自动调整 DataGridViewl.AutoResizeRowHeadersWidth( DataGridViewRowHeadersWidthSizeMode.AutoSiz

25、eToAIIHeaders); 关于性能: 通过AutoSizeColumnsMode或者AutoSizeRowsMode属性所指定的单元格进行自动调整时,如果调整次数过于多那么将 可能导致性能下降, 尤其是在行和列数比较多的情况下。在这时用DisplayedCells代替AllCells能减少非所见的单元格的调整,从而捉高性 DataGridView冻结列或行 1) 列冻结 DataGridViewColumn.Frozen属性为True时,该列左侧的所有列彼固定,横向滚动时固定列不随滚动条滚动而左右移 动。这对于重要列固定显示很有用。 / DataGridView 1的左侧2列固定 Dat

26、aGridViewl.Columns1.Froze n = true; 但是,DataGridView.AllowllserToOrderColumns = True时,固定列不能移动到非固定列,反之亦然。 2) 行冻结 DataGridViewRow.Frozen属性为True时,该行上而的所有行被固定,纵向滚动时固定行不随滚动条滚动而上下移动。 / DataGridView 1 的上 3 行固定 DataGridViewl .Rows2. Froze n = true; DataGridView列顺序的调整 设定DataGridView的AllowUserToOrderColumns为Tr

27、ue的时候.用户可以自由调整列的顺序。 当用户改变列的顺序的时候,其本身的Index不会改变.但是Displayindex改变八你也可以通过程序改变Displayindex 来改变列的最新资料推荐 最新精品资料整理推荐.更新于二O二 O 年十二月十八日2020年12月18日星期五19:36:31 顺序。列顺序发生改变时会引发ColumnDisplaylndexChanged事件: / DataGridView!的 ColumnDisplaylndexChanged 事件处理方法 private void DataGridView1_ColumnDisplaylndexChanged(objec

28、t sender, DataGridViewColumnEventArgs e) Console.WriteLine(M0的位置改变到1: e.Column.Name, e.Column.Displaylndex); 行头列头的单元格 C# 改变DataGridViewl的第列列头内容 DataGridViewl .Columns0.HeaderCell.Value =第咧”; 改变DataGridView 1的第行行头内容 DataGridViewl .Rows0.HeaderCell.Value = ”第行: /改变DataGridViewl的左上头部单元内容 DataGridViewl.

29、TopLeftHeaderCell. Value = ”左上豎 另外你也可以通过HeadefText来改变他们的内容。 C# 改变DataGridViewl的第列列头内容 DataGridViewl .Columns0.HeaderText =第列二 DataGridView剪切板的操作 TOP DataGridView.ClipboardCopyMode 属性被设定为 DataGridViewClipboardCopyMode.Disable 以外的情况时,Ctrl + C按下的时候,被选择的单元格的内容会拷贝到系统剪切板内。格式有:Text, UnicodeText, Htmb Comma

30、SeparatedValueo 可以总接粘贴到 Excel 内 ClipboardCopyMode 还可以设定 Header 部分是否拷贝:EnableAlwaysIncludeHeaderText 拷贝 Header 部分. EnableWithoutHeaderText 则不拷贝。默认是 EnableWithAutoHeaderText , Header 如果选择了的话,就拷贝。 1) 编程方式实现剪切板的拷贝 Clipboard.SetDataObject(DataGridView1.GetClipboardContent() 2) DataGridView的数据粘贴 实现剪切板的拷贝比

31、较容易,但是实现DataGridView的直接粘贴就比较难 C Ctrl + V按下进行粘贴时, DataGridView没有提供方法,只能自己实现。 以下,是粘贴时简单的事例代码,将拷贝数据粘贴到以选择单元格开始的区域内。 C# /当前单元格是否选择的判断 最新资料推荐 最新精品资料整理推荐.更新于二O二 O 年十二月十八日2020年12月18日星期五19:36:31 if (DataGridViewl .CurrentCell = null) return; int insertRowIndex = DataGridViewl .CurrentCell.Rowindex; 获取剪切板的内容

32、,并按行分割 string pasteText = Clipboard.GetText(); if (string.IsNullOrEmpty(pasteText) return; pasteText = pasteText. Replace(w ”,H ”); pasteText = pasteText.Replacef * *); pasteText.TrimEnd(new char 1 * ); stringQ lines = pasteText.Splitf *); bool isHeader = true; foreach (string line in lines) 是否是列头 i

33、f (isHeader) isHeader = false; con tinue; /按Tab分割数据 stringQ vals = line.Split(* *); 判断列数是否统一 if (vals.Length 1 != DataGridViewl .ColumnCount) throw new ApplicationException(M粘贴的列数不左确=”); DataGridViewRow row = DataGridViewl.RowsinsertRowlndex; 行头设定 row.HeaderCell.Value = vals0; 单元格内容设定 for (int i = 0

34、; i Row Column DataGridView = CellContextMenuStripNeeded RowContextMenuStripNeeded 事件 利用CellContextMenuStripNeeded事件可以设定单元格的右键菜单,尤其但需要右键菜单根据单元格值的变化而变化 的时候。比起使用循环遍历,使用该事件来设定右键菜单的效率更趾 但是,在DataGridView使用了 DataSource绑定而 且是VirtualMode的时候,该事件将不被引发。 C# / CellContextMenuStripNeeded 事件处理力法 private void DataG

35、ridView1_CellContextMenuStripNeeded(object sender, DataGridViewCellContextMenuStripNeededEventArgs e) DataGridView dgv = (DataGridView)sender; if (e.Rowindex 0) / 列头的 ContextMenuStrip 设定 e.ContextMenuStrip = this.ContextMenuStripl; else if (e.Columnindex 0) / 行头的 ContextMenuStrip 设定 e.ContextMenuStr

36、ip = this.ContextMenuStrip2; else if (dgve.ColumnIndex, e.Rowindex.Value is int) /如果单元格值是整数时 最新资料推荐 最新精品资料整理推荐.更新于二O二 O 年十二月十八日2020年12月18日星期五19:36:31 e.ContextMenuStrip = this.ContextMenuStrip3; 同样,可以通过RowContextMenuStripNeeded事件来设定行的右键菜单。 C# / RowContextMenuStripNeeded 事件处理方法 private void DataGridV

37、iew1_RowContextMenuStripNeeded(object sender, DataGridViewRowContextMenuStripNeededEventArgs e) DataGridView dgv = (DataGridView)sender; / 当Columnr*列是 Bool 型且为 True 时、设定其的 ContextMenuStrip object boolVal = dgvMColumnV e.Rowindex.Value; Console.WriteLine(boolVal); if (boolVal is bool & (bool)boolVal)

38、 e.ContextMenuStrip = this.ContextMenuStripl; CellContextMenuStripNeeded 事件处理方法的参数中.e.Columnlndex=-1 J *示行头、e.Rowlndex=1_| 农示列 头。RowContextMenuStripNeeded 则不存在e.Rowlndex=1的情况。 DataGridView的单元格的边框、网格线样式的设定 1) DataGridView的边框线样式的设定 DataGridView的边框线的样式是通过DataGridView.BorderStyle属性来设定的。BorderStyle属性设定值是

39、个 Borderstyle 枚举:FixedSingle (单线,默认)、Fixed3D、None。 2) 单元格的边框线样式的设定 竜元格的边框线的样式是通过DataGridView.CellBorderStyle属性来设定的。CellBorderStyle属性设定值是 DataGridViewCellBorderStyle 枚举。(详细参见 MSDN) 另外,通过 DataGridView.ColumnHeadersBorderStyle 和 RowHeadersBorderStyle 属性可以修改 DataGridView 的头部 的单元格边框线样式。属性设定值是DataGridView

40、HeaderBorderStyle枚举。(详细参见MSDN) 3) 单元格的边框颜色的设定 单元格的边框线的颜色可以通过DataGridView.GridColor B性来设定的。默认是ControlDarkDark o但是只有在 CellBorderStyle彼设定为Single、SingleHorizontaL SingleVertical的条件下才能改变其边框线的颜色。同样, ColumnHeadersBorderStyle 以及 RowHeadersBorderStyle 只有在彼设定为 Single 时,才能改变颜色。 4) 单元格的上下左右的边框线式样的单独设定 CellBorderStyle只能设定单元格全部边框线的式样。要单独改变单元格某边边框式样的话,需要用到 DataGridV

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论