WinForm开发 DataGridView控件的各种操作总结(三、针对datagridview全局属性的设置)
2012-10-15 21:45
656 查看
三、针对datagridview全局属性的设置
*******使用 EditMode
属性
DataGridView.EditMode 属性被设置为 DataGridViewEditMode.EditProgrammatically
时,用户就不能手动编辑单元格的内容了。但是可以通过程序,调用 DataGridView.BeginEdit
方法,使单元格进入编辑模式进行编辑。
DataGridView1.EditMode = DataGridViewEditMode.EditProgrammatically;
根据条件设定单元格的不可编辑状态
当一个一个的通过单元格坐标设定单元格 ReadOnly
属性的方法太麻烦的时候,你可以通过 CellBeginEdit
事件来取消单元格的编辑。
*******// CellBeginEdit
事件处理方法
********DataGridView
剪切板的操作
DataGridView.ClipboardCopyMode 属性被设定为 DataGridViewClipboardCopyMode.Disable
以外的情况时,「Ctrl+ C」按下的时候,被选择的单元格的内容会拷贝到系统剪切板内。格式有: Text,
UnicodeText,Html, CommaSeparatedValue。可以直接粘贴到Excel
内。
ClipboardCopyMode 还可以设定 Header部分是否拷贝: EnableAlwaysIncludeHeaderText
拷贝Header部分、EnableWithoutHeaderText则不拷贝。默认是EnableWithAutoHeaderText
, Header
如果选择了的话,就拷贝。
1)编程方式实现剪切板的拷贝
Clipboard.SetDataObject(DataGridView1.GetClipboardContent())
2) DataGridView 的数据粘贴
实现剪切板的拷贝比较容易,但是实现 DataGridView
的直接粘贴就比较难了。「Ctrl + V」按下进行粘贴时,DataGridView
没有提供方法,只能自己实现。
以下,是粘贴时简单的事例代码,将拷贝数据粘贴到以选择单元格开始的区域内。
*******DataGridView
的右键菜单(ContextMenuStrip)
DataGridView, DataGridViewColumn, DataGridViewRow, DataGridViewCell
有ContextMenuStrip
属性。可以通过设定 ContextMenuStrip
对象来控制 DataGridView
的右键菜单的显示。DataGridViewColumn
的 ContextMenuStrip
属性设定了除了列头以外的单元格的右键菜单。 DataGridViewRow
的ContextMenuStrip
属性设定了除了行头以外的单元格的右键菜单。DataGridViewCell
的 ContextMenuStrip
属性设定了指定单元格的右键菜单。
对于单元格上的右键菜单的设定,优先顺序是: Cell > Row > Column > DataGridView
*****CellContextMenuStripNeeded、RowContextMenuStripNeeded 事件
利用 CellContextMenuStripNeeded 事件可以设定单元格的右键菜单,尤其但需要右键菜单根据单元格值的变化而变化的时候。比起使用循环遍历,使用该事件来设定右键菜单的效率更高。但是,在DataGridView使用了DataSource绑定而且是VirtualMode的时候,该事件将不被引发。
同样,可以通过 RowContextMenuStripNeeded 事件来设定行的右键菜单。
CellContextMenuStripNeeded 事件处理方法的参数中、「e.ColumnIndex=-1」表示行头、「e.RowIndex=-1」表示列头。RowContextMenuStripNeeded则不存在「e.RowIndex=-1」的情况。
*******使用 EditMode
属性
DataGridView.EditMode 属性被设置为 DataGridViewEditMode.EditProgrammatically
时,用户就不能手动编辑单元格的内容了。但是可以通过程序,调用 DataGridView.BeginEdit
方法,使单元格进入编辑模式进行编辑。
DataGridView1.EditMode = DataGridViewEditMode.EditProgrammatically;
根据条件设定单元格的不可编辑状态
当一个一个的通过单元格坐标设定单元格 ReadOnly
属性的方法太麻烦的时候,你可以通过 CellBeginEdit
事件来取消单元格的编辑。
*******// CellBeginEdit
事件处理方法
private void DataGridView1_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e) { DataGridView dgv = (DataGridView)sender; //是否可以进行编辑的条件检查 if (dgv.Columns[e.ColumnIndex].Name == "Column1" && !(bool)dgv["Column2", e.RowIndex].Value) { // 取消编辑 e.Cancel = true; } }
********DataGridView
剪切板的操作
DataGridView.ClipboardCopyMode 属性被设定为 DataGridViewClipboardCopyMode.Disable
以外的情况时,「Ctrl+ C」按下的时候,被选择的单元格的内容会拷贝到系统剪切板内。格式有: Text,
UnicodeText,Html, CommaSeparatedValue。可以直接粘贴到Excel
内。
ClipboardCopyMode 还可以设定 Header部分是否拷贝: EnableAlwaysIncludeHeaderText
拷贝Header部分、EnableWithoutHeaderText则不拷贝。默认是EnableWithAutoHeaderText
, Header
如果选择了的话,就拷贝。
1)编程方式实现剪切板的拷贝
Clipboard.SetDataObject(DataGridView1.GetClipboardContent())
2) DataGridView 的数据粘贴
实现剪切板的拷贝比较容易,但是实现 DataGridView
的直接粘贴就比较难了。「Ctrl + V」按下进行粘贴时,DataGridView
没有提供方法,只能自己实现。
以下,是粘贴时简单的事例代码,将拷贝数据粘贴到以选择单元格开始的区域内。
//当前单元格是否选择的判断 if (DataGridView1.CurrentCell == null) return; int insertRowIndex = DataGridView1.CurrentCell.RowIndex; // 获取剪切板的内容,并按行分割 string pasteText = Clipboard.GetText(); if (string.IsNullOrEmpty(pasteText)) return; pasteText = pasteText.Replace(" ", " "); pasteText = pasteText.Replace(' ', ' '); pasteText.TrimEnd(new char[] { ' ' }); string[] lines = pasteText.Split(' '); bool isHeader = true; foreach (string line in lines) { // 是否是列头 if (isHeader) { isHeader = false; continue; } // 按 Tab 分割数据 string[] vals = line.Split(' '); // 判断列数是否统一 if (vals.Length - 1 != DataGridView1.ColumnCount) throw new ApplicationException("粘贴的列数不正确。"); DataGridViewRow row = DataGridView1.Rows[insertRowIndex]; // 行头设定 row.HeaderCell.Value = vals[0]; // 单元格内容设定 for (int i = 0; i < row.Cells.Count; i++) { row.Cells[i].Value = vals[i + 1]; } // DataGridView的行索引+1 insertRowIndex++; }
*******DataGridView
的右键菜单(ContextMenuStrip)
DataGridView, DataGridViewColumn, DataGridViewRow, DataGridViewCell
有ContextMenuStrip
属性。可以通过设定 ContextMenuStrip
对象来控制 DataGridView
的右键菜单的显示。DataGridViewColumn
的 ContextMenuStrip
属性设定了除了列头以外的单元格的右键菜单。 DataGridViewRow
的ContextMenuStrip
属性设定了除了行头以外的单元格的右键菜单。DataGridViewCell
的 ContextMenuStrip
属性设定了指定单元格的右键菜单。
// DataGridView 的 ContextMenuStrip 设定 DataGridView1.ContextMenuStrip = this.ContextMenuStrip1; // 列的 ContextMenuStrip 设定 DataGridView1.Columns[0].ContextMenuStrip = this.ContextMenuStrip2; // 列头的 ContextMenuStrip 设定 DataGridView1.Columns[0].HeaderCell.ContextMenuStrip = this.ContextMenuStrip2; // 行的 ContextMenuStrip 设定 DataGridView1.Rows[0].ContextMenuStrip = this.ContextMenuStrip3; // 单元格的 ContextMenuStrip 设定 DataGridView1[0, 0].ContextMenuStrip = this.ContextMenuStrip4;
对于单元格上的右键菜单的设定,优先顺序是: Cell > Row > Column > DataGridView
*****CellContextMenuStripNeeded、RowContextMenuStripNeeded 事件
利用 CellContextMenuStripNeeded 事件可以设定单元格的右键菜单,尤其但需要右键菜单根据单元格值的变化而变化的时候。比起使用循环遍历,使用该事件来设定右键菜单的效率更高。但是,在DataGridView使用了DataSource绑定而且是VirtualMode的时候,该事件将不被引发。
// CellContextMenuStripNeeded事件处理方法 private void DataGridView1_CellContextMenuStripNeeded(object sender, DataGridViewCellContextMenuStripNeededEventArgs e) { DataGridView dgv = (DataGridView)sender; if (e.RowIndex < 0) { // 列头的ContextMenuStrip设定 e.ContextMenuStrip = this.ContextMenuStrip1; } else if (e.ColumnIndex < 0) { // 行头的ContextMenuStrip设定 e.ContextMenuStrip = this.ContextMenuStrip2; } else if (dgv[e.ColumnIndex, e.RowIndex].Value is int) { // 如果单元格值是整数时 e.ContextMenuStrip = this.ContextMenuStrip3; } }
同样,可以通过 RowContextMenuStripNeeded 事件来设定行的右键菜单。
// RowContextMenuStripNeeded事件处理方法 private void DataGridView1_RowContextMenuStripNeeded(object sender, DataGridViewRowContextMenuStripNeededEventArgs e) { DataGridView dgv = (DataGridView)sender; // 当"Column1"列是Bool型且为True时、设定其的ContextMenuStrip object boolVal = dgv["Column1", e.RowIndex].Value; Console.WriteLine(boolVal); if (boolVal is bool && (bool)boolVal) { e.ContextMenuStrip = this.ContextMenuStrip1; } }
CellContextMenuStripNeeded 事件处理方法的参数中、「e.ColumnIndex=-1」表示行头、「e.RowIndex=-1」表示列头。RowContextMenuStripNeeded则不存在「e.RowIndex=-1」的情况。
相关文章推荐
- c# WinForm开发 DataGridView控件的各种操作总结(单元格操作,属性设置)
- c# WinForm开发 DataGridView控件的各种操作总结(单元格操作,属性设置)
- c# WinForm开发 DataGridView控件的各种操作总结(单元格操作,属性设置)
- c# WinForm开发 DataGridView控件的各种操作总结(单元格操作,属性设置)
- c# WinForm开发 DataGridView控件的各种操作总结(单元格操作,属性设置)
- C# WinForm开发 DataGridView控件的各种操作总结(单元格操作,属性设置)
- c# WinForm开发 DataGridView控件的各种操作总结(单元格操作,属性设置)
- c# WinForm开发 DataGridView控件的各种操作总结(单元格操作,属性设置)
- c# WinForm开发 DataGridView控件的各种操作总结(单元格操作,属性设置)
- 【转】c# WinForm开发 DataGridView控件的各种操作总结(单元格操作,属性设置)
- c# WinForm开发 DataGridView控件的各种操作总结(单元格操作,属性设置)
- c# WinForm开发 DataGridView控件的各种操作总结(单元格操作,属性设置)
- [网上搜集]c# WinForm开发 DataGridView控件的各种操作总结(单元格操作,属性设置)
- 转:c# WinForm开发 DataGridView控件的各种操作总结(单元格操作,属性设置)
- c# WinForm开发 DataGridView控件的各种操作总结(单元格操作,属性设置)
- c# WinForm开发 DataGridView控件的各种操作总结(单元格操作,属性设置)
- c# WinForm开发 DataGridView控件的各种操作总结(单元格操作,属性设置)
- c# WinForm开发 DataGridView控件的各种操作总结(单元格操作,属性设置)
- c# WinForm开发 DataGridView控件的各种操作总结(单元格操作,属性设置)
- c# WinForm开发 DataGridView控件的各种操作总结(单元格操作,属性设置)