DataGridView控件的各种操作总结 联系客服

发布时间 : 星期六 文章DataGridView控件的各种操作总结更新完毕开始阅读4f34bc6f9e314332396893da

明。

2)指定列或行自动调整 // 第一列自动调整

DataGridView1.Columns[0].AutoSizeMode

=DataGridViewAutoSizeColumnMode.DisplayedCells;

AutoSizeMode 设定为 NotSet 时, 默认继承的是 DataGridView.AutoSizeColumnsMode 属性。

3) 设定列头的高度和行头的宽度自动调整

// 设定列头的宽度可以自由调整

DataGridView1.ColumnHeadersHeightSizeMode =

DataGridViewColumnHeadersHeightSizeMode.AutoSize; // 设定行头的宽度可以自由调整

DataGridView1.RowHeadersWidthSizeMode =

DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders; 4) 随时自动调整

a, 临时的,让列宽自动调整,这和指定AutoSizeColumnsMode属性一样。

// 让 DataGridView1 的所有列宽自动调整一下。

DataGridView1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells); // 让 DataGridView1 的第一列的列宽自动调整一下。

DataGridView1.AutoResizeColumn(0, DataGridViewAutoSizeColumnMode.AllCells);上面调用的 AutoResizeColumns 和 AutoResizeColumn 当指定的是

DataGridViewAutoSizeColumnMode.AllCells 的时候, 参数可以省略。即: DataGridView1.AutoResizeColumn(0) 和 DataGridView1.AutoResizeColumns() b,临时的,让行高自动调整

// 让 DataGridView1 的所有行高自动调整一下。

DataGridView1.AutoResizeRows(DataGridViewAutoSizeRowsMode.AllCells); //让 DataGridView1 的第一行的行高自动调整一下。

DataGridView1.AutoResizeRow(0, DataGridViewAutoSizeRowMode.AllCells);上面调用的 AutoResizeRows 和 AutoResizeRow 当指定的是DataGridViewAutoSizeRowMode.AllCells 的时候, 参数可以省略。即:DataGridView1.AutoResizeRow (0) 和 DataGridView1.AutoResizeRows() c,临时的,让行头和列头自动调整 // 列头高度自动调整

DataGridView1.AutoResizeColumnHeadersHeight(); // 行头宽度自动调整

DataGridView1.AutoResizeRowHeadersWidth(

DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders); 关于性能:

通过 AutoSizeColumnsMode 或者 AutoSizeRowsMode 属性所指定的单元格进行自动调整时,如果调整次数过于多那么将可能导致性能下降,尤其是在行和列数比较多的情况下。在这时用 DisplayedCells 代替 AllCells 能减少非所见的单元格的调整,从而提高性能。

******DataGridView 冻结列或行

1) 列冻结

DataGridViewColumn.Frozen 属性为 True 时, 该列左侧的所有列被固定, 横向滚动时固定列不随滚动条滚动而左右移动。这对于重要列固定显示很有用。

// DataGridView1的左侧2列固定

DataGridView1.Columns[1].Frozen = true;

但是,DataGridView.AllowUserToOrderColumns = True 时,固定列不能移动到非固定列, 反之亦然。 2) 行冻结

DataGridViewRow.Frozen 属性为 True 时, 该行上面的所有行被固定, 纵向滚动时固定行不随滚动条滚动而上下移动。

// DataGridView1 的上3行固定

DataGridView1.Rows[2].Frozen = true; ******DataGridView 列顺序的调整

设定 DataGridView 的 AllowUserToOrderColumns 为 True 的时候, 用户可以自由调整列的顺序。

当用户改变列的顺序的时候,其本身的 Index 不会改变,但是 DisplayIndex 改变了。你也可以通过程序改变 DisplayIndex 来改变列的顺序。 列顺序发生改变时会引发 ColumnDisplayIndexChanged 事件:

// DataGridView1的ColumnDisplayIndexChanged事件处理方法

private void DataGridView1_ColumnDisplayIndexChanged(object sender, DataGridViewColumnEventArgs e) {

Console.WriteLine(\的位置改变到 {1} \ e.Column.Name, e.Column.DisplayIndex); }

********DataGridView 新加行的默认值的设定

需要指定新加行的默认值的时候,可以在DataGridView.DefaultValuesNeeded事件里处理。在该事件中处理除了可以设定默认值以外,还可以指定某些特定的单元格的ReadOnly属性等。 // DefaultValuesNeeded 事件处理方法

private void DataGridView1_DefaultValuesNeeded(object sender, DataGridViewRowEventArgs e) {

// 设定单元格的默认值

e.Row.Cells[\ e.Row.Cells[\

}

三、针对datagridview全局属性的设置

*******使用 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 == \ !(bool)dgv[\ {

// 取消编辑

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++)