C#中DataGridView控件使用大全转载

原创
小哥 3年前 (2022-11-08) 阅读数 15 #C#
文章标签 .netC#

DataGridView 动态添加新行:

DataGridView控件在实际应用中非常实用,尤其是当表显示数据时。您可以静态绑定数据源,这是自动的。DataGridView控件来添加适当的行。如果你需要保持活力的话。DataGridView控件添加新行的方法有很多种,下面是对如何添加的简要介绍。DataGridView控件以两种方式动态添加新行:

方法一:

int index=this.dataGridView1.Rows.Add();

this.dataGridView1.Rows[index].Cells[0].Value = "1";

this.dataGridView1.Rows[index].Cells[1].Value = "2";

this.dataGridView1.Rows[index].Cells[2].Value = "监听";

利用dataGridView1.Rows.Add()事件为DataGridView控件添加新行时,该函数返回添加的新行的索引号,即新行的行号,然后可以通过索引号操作该行的各个单元格,如dataGridView1.Rows[index].Cells[0].Value = "1"。这是一种非常常见和简单的方法。

方法二:

DataGridViewRow row = new DataGridViewRow();

DataGridViewTextBoxCell textboxcell = new DataGridViewTextBoxCell();

textboxcell.Value = "aaa";

row.Cells.Add(textboxcell);

DataGridViewComboBoxCell comboxcell = new DataGridViewComboBoxCell ();

row.Cells.Add(comboxcell);

dataGridView1.Rows.Add(row);

方法2比方法1复杂,但在一些特殊场合非常实用。例如,当您想要将下拉框和按钮等控件添加到新行中的某些单元格时,它非常有用。DataGridViewRow row = new DataGridViewRow();是创建DataGridView在ROW对象中,DataGridViewTextBoxCell单元格的内容是TextBox,DataGridViewComboBoxCell 是的,单元格的内容是下拉列表框。同样的,也可以看到,DataGridViewButtonCell单元格的内容是按钮,等等。textboxcell是新创建的单元格的对象,您可以为其添加其属性。然后通过row.Cells.Add(textboxcell)为row对象添加textboxcell牢房。要添加其他单元格,请使用相同的方法。最后,dataGridView1.Rows.Add(row)为dataGridView1控件添加一个新行。row。


DataGridView 获取或修改当前单元格的内容:

当前单元格引用 DataGridView 焦点所在的单元格,可以传递。 DataGridView 对象的 CurrentCell 财产收购。如果当前单元格不存在,则返回Nothing(C#是null)

// 获取当前单元格内容
Console.WriteLine(DataGridView1.CurrentCell.Value);
// 获取当前单元格的列 Index
Console.WriteLine(DataGridView1.CurrentCell.ColumnIndex);
// 获取当前单元格的行 Index
Console.WriteLine(DataGridView1.CurrentCell.RowIndex);

此外,使用 DataGridView.CurrentCellAddress 属性(而不是直接访问单元格)来确定单元格的位置。

行: DataGridView.CurrentCellAddress.Y

列:DataGridView.CurrentCellAddress.X 。这对于避免取消共享共享行非常有用。

可以设置当前单元格 DataGridView 对象的 CurrentCell 去改变。可以通过 CurrentCell 来设定DataGridView 激活细胞。将要 CurrentCell 设为 Nothing(null) 可以停用的细胞。

// 设定 (0, 0) 是当前单元格
DataGridView1.CurrentCell = DataGridView1[0, 0];
您还可以使用 CurrentCell 若要设置选定行,请执行以下操作。
/// 向下遍历
private void button4_Click(object sender, EventArgs e)
...{
int row = this.dataGridView1.CurrentRow.Index + 1;
if (row > this.dataGridView1.RowCount - 1)
row = 0;
this.dataGridView1.CurrentCell = this.dataGridView1[0, row];
}
/// 向上遍历
private void button5_Click(object sender, EventArgs e)
...{
int row = this.dataGridView1.CurrentRow.Index - 1;
if (row < 0)
row = this.dataGridView1.RowCount - 1;
this.dataGridView1.CurrentCell = this.dataGridView1[0, row];
}

  • 注意: this.dataGridView 索引器的参数为: columnIndex, rowIndex 或是 columnName, rowIndex
    这与习惯不同。

DataGridView 将单元格设置为只读:

1) 使用 ReadOnly 属性
如果需要,DataGridView 不能编辑其中的所有单元格, 那么只要:

// 设置 DataGridView1 为只读
DataGridView1.ReadOnly = true;此时,用户的新行操作和删除行操作也被阻止。

如果需要,DataGridView 不能编辑其中的单元格, 那么只要:

// 设置 DataGridView1 的第2整个列单元格是只读的
DataGridView1.Columns[1].ReadOnly = true;

// 设置 DataGridView1 的第3整个行单元格是只读的
DataGridView1.Rows[2].ReadOnly = true;

// 设置 DataGridView1 的[0,0]单元格为只读
DataGridView1[0, 0].ReadOnly = true;

2) 使用 EditMode 属性
DataGridView.EditMode 属性已设置 DataGridViewEditMode.EditProgrammatically 用户不能手动编辑单元格的内容。但是,它可以通过程序调用。 DataGridView.BeginEdit 方法将单元格置于编辑模式以进行编辑。

DataGridView1.EditMode = DataGridViewEditMode.EditProgrammatically;

3) 根据条件设置单元格的不可编辑状态。
逐个按单元格坐标设置单元格时。 ReadOnly 当您可以传递时,属性方法太麻烦了。 CellBeginEdit 事件取消对单元格的编辑。

// CellBeginEdit 事件处理方法
private void DataGridView1_CellBeginEdit(object sender, DataGridViewCellCancelEv entArgs e)
{
DataGridView dgv = (DataGridView)sender;
//是否可以勾选编辑条件
if (dgv.Columns[e.ColumnIndex].Name == "Column1" && !(bool)dgv["Column2", e.RowIndex].Value)
{
// 取消编辑
e.Cancel = true;
}
}

DataGridView 不显示新的底线:

通常 DataGridView 的最下面一行是用户新追加的行(行标题显示)。 * )。如果您不希望用户追加新行,也就是说,您不想显示新行,则可以。 DataGridView 对象的 AllowUserToAddRows 属性已设置 False。

// 设置用户不能手动提供 DataGridView1 添加新行
DataGridView1.AllowUserToAddRows = false;
但是,您可以通过该计划: DataGridViewRowCollectio n.Add 为 DataGridView 添加新行。

补足: 如果 DataGridView 的 DataSource 绑定的是 DataView, 您还可以设置 DataView.AllowAdd
属性为 False 以达到同样的效果。

DataGridView 确定新行:

DataGridView 的AllowUserToAddRows属性为True当允许用户追加新行时,DataGridView的最后一行是新追加的行。(*行)。
使用 DataGridViewRow.IsNewRow 该属性确定哪一行是新追加的行。此外,DataGridView.NewRowIndex 您可以获得新行的行序号。.
当没有新的线路时,NewRowIndex = -1。

DataGridView 行的用户删除操作的自定义:

1无条件限制行删除。
默认时,DataGridView 它允许用户删除行。IF设置 DataGridView对象的AllowUserToDeleteRows属性为 False 禁止用户行删除操作。

// 禁止DataGridView1行删除操作。
DataGridView1.AllowUserToDeleteRows = false;
然而, DataGridViewRowCollectio n.Remove 仍然可以删除行。
补足: 如果 DataGridView 绑定的是 DataView 言辞, DataView.AllowDelete 您还可以控制行的删除。

2删除行时的条件判断处理。
当用户删除一行时,将引发该行。 DataGridView.UserDeletingRow 事件。在这种情况下,您可以判断条件并取消删除。

// DataGridView1 的 UserDeletingRow 事件
private void DataGridView1_UserDeletingRow( object sender, DataGridViewRowCancelEve ntArgs e)
{
// 删除前的用户确认。
if (MessageBox.Show("您确定要删除行数据吗?", "删除确认",
MessageBoxButtons.OKCancel, MessageBoxIcon.Question) != DialogResult.OK)
{
// 如果不是 OK,然后取消。
e.Cancel = true;
}
}

DataGridView 隐藏和删除行和列:

1) 隐藏行和列

// DataGridView1第一列被隐藏。
DataGridView1.Columns[0].Visible = false;

// DataGridView1隐藏的第一行
DataGridView1.Rows[0].Visible = false;

2) 隐藏行头和列头

// 列头隐藏
DataGridView1.ColumnHeadersVisible = false;

// 行头隐藏
DataGridView1.RowHeadersVisible = false;

3) 删除行和列

删除名为"Column1"的列
DataGridView1.Columns.Remove("Column1");

删除第一列

DataGridView1.Columns.RemoveAt(0);
删除第一行
DataGridView1.Rows.RemoveAt(0);

4) 删除所选行

foreach (DataGridViewRow r in DataGridView1.SelectedRows)
{
if (!r.IsNewRow)
{
DataGridView1.Rows.Remove(r);
}
}

DataGridView 禁止的列或行Resize:

1禁止所有列或行。Resize

// 禁止用户更改DataGridView1所有列的列宽
DataGridView1.AllowUserToResizeColumns = false;

//禁止用户更改DataGridView1所有行的行高
DataGridView1.AllowUserToResizeRows = false;
但它是可以通过的。 DataGridViewColumn.Width 或者 DataGridViewRow.Height 属性设置列宽和行高。

2禁止指定行或列。Resize

// 禁止用户更改DataGridView1第一列的列宽
DataGridView1.Columns[0].Resizable = DataGridViewTriState.False;

// 禁止用户更改DataGridView1第一列的行宽
DataGridView1.Rows[0].Resizable = DataGridViewTriState.False;

关于 NoSet :
当 Resizable 属性设为 DataGridViewTriState.NotSet 时, 实际上会违约吗? DataGridView 的 AllowUserToResizeColumns 和 AllowUserToResizeRows 已设置的属性值。
比如: DataGridView.AllowUserToResizeColumns = False 且 Resizable 是 NoSet 设定时,Resizable = False 。

判断 Resizable 是否设置继承。 DataGridView 的 AllowUserToResizeColumns 和 AllowUserToResizeRows 属性值,
可以根据 State 属性判断。如果 State 属性含有 ResizableSet,则不存在继承设置。

3) 设置列宽和行高的最小值。

// 设置第一列的最小列宽 100
DataGridView1.Columns[0].MinimumWidth = 100;

// 设置了第一行的最小行高 50
DataGridView1.Rows[0].MinimumHeight = 50;

4) 禁止用户更改行头的宽度以及列头的高度

// 禁止用户更改列头的高度
DataGridView1.ColumnHeadersHeightSizeM ode =
DataGridViewColumnHeader sHeightSizeMode.DisableResizing;

// 设置用户以更改行头的宽度。
DataGridView1.RowHeadersWidthSizeMode =
DataGridViewRowHeadersWi dthSizeMode.EnableResizing;

DataGridView 自动调整列宽和行高的设置:

1) 设置要自动调整的行高和列宽。

// 设定包括Header并自动调整所有单元格的列宽。
DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColu mnsMode.AllCells;

// 设定包括Header并自动调整所有单元格的行高。
DataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRows Mode.AllCells;
AutoSizeColumnsMode 请参考该属性的设置值枚举。 msdn 的 DataGridViewAutoSizeRows Mode 说明。

2)指定列或行自动调整

// 第一列会自动调整。
DataGridView1.Columns[0].AutoSizeMode =
DataGridViewAutoSizeColu mnMode.DisplayedCells;
AutoSizeMode 设定为 NotSet 时, 默认继承为 DataGridView.AutoSizeColumnsMode 属性。

3) 设置列头高度和自动调整的行头宽度。
// 设置的列表头宽度可以自由调整。
DataGridView1.ColumnHeadersHeightSizeM ode =
DataGridViewColumnHeader sHeightSizeMode.AutoSize;

// 设置的线头宽度可自由调整。
DataGridView1.RowHeadersWidthSizeMode =
DataGridViewRowHeadersWi dthSizeMode.AutoSizeToAllHeaders;

4)随时自动调整
a, 临时性的,让列宽自动调整,其中和指定。AutoSizeColumnsMode这些属性是相同的。
// 让 DataGridView1 所有列宽都会自动调整。
DataGridView1.AutoResizeColumns(DataGridViewAutoSizeColu mnsMode.AllCells);

// 让 DataGridView1 第一列的列宽自动调整一下。
DataGridView1.AutoResizeColumn(0, DataGridViewAutoSizeColu mnMode.AllCells);在上面调用 AutoResizeColumns 和 AutoResizeColumn
如果指定为DataGridViewAutoSizeColu mnMode.AllCells 可以省略参数。即:
DataGridView1.AutoResizeColumn(0) 和 DataGridView1.AutoResizeColumns()

b,临时,让线条高度自动调整

// 让 DataGridView1 所有行高都会自动调整。
DataGridView1.AutoResizeRows(DataGridViewAutoSizeRows Mode.AllCells);

//让 DataGridView1 自动调整第一行的行高。
DataGridView1.AutoResizeRow(0, DataGridViewAutoSizeRowM ode.AllCells);在上面调用 AutoResizeRows 和 AutoResizeRow
如果指定为DataGridViewAutoSizeRowM ode.AllCells 可以省略参数。即:DataGridView1.AutoResizeRow (0) 和 DataGridView1.AutoResizeRows()

c,临时,让行头和列头自动调整

// 列表头高度自动调整
DataGridView1.AutoResizeColumnHeadersH eight();

// 自动调整的行头宽度
DataGridView1.AutoResizeRowHeadersWidt h(
DataGridViewRowHeadersWi dthSizeMode.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 若要更改列的顺序,请执行以下操作。 当列顺序更改时引发 ColumnDisplayIndexChange d 事件:

// DataGridView1的ColumnDisplayIndexChange d事件处理方法
private void DataGridView1_ColumnDisplayIndexChange d(object sender,
DataGridViewColumnEventA rgs e)
{
Console.WriteLine("{0} 的地位 {1} ",
e.Column.Name, e.Column.DisplayIndex);
}

行表头列表头单元格:

// 改变DataGridView1标题内容的第一列。
DataGridView1.Columns[0].HeaderCell.Value = "第一列";

// 改变DataGridView1第一行行头内容。
DataGridView1.Rows[0].HeaderCell.Value = "第一行";

// 改变DataGridView1左上角单位内容
DataGridView1.TopLeftHeaderCell.Value = "左上";

此外,您还可以通过 HeaderText 来改变他们的内容。
[C#]
// 改变DataGridView1标题内容的第一列。
DataGridView1.Columns[0].HeaderText = "第一列";

DataGridView 剪切板的操作:

DataGridView.ClipboardCopyMode 属性已设置 DataGridViewClipboardCop yMode.Disable 在其他情况下,Ctrl + C“按下后,选定单元格的内容将被复制到系统剪贴板。格式为: Text, UnicodeText,Html, CommaSeparatedValue。可以直接粘贴 Excel 内。

ClipboardCopyMode 它也可以设置为 Header部分复制: EnableAlwaysIncludeHeade rText 拷贝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 单元格的ToolTip的设置:

DataGridView.ShowCellToolTips = True 在单元的情况下 ToolTip 可以被表达出来。对于较窄且不能完全显示的单元格, ToolTip 可以显示必要的信息。

1)设置单元格ToolTip内容
[C#]
// 设置单元格ToolTip内容
DataGridView1[0, 0].ToolTipText = "无法修改此单元格的内容";

// 设置列表头单元格ToolTip内容
DataGridView1.Columns[0].ToolTipText = "此列只能输入数字";

// 设置行头的单元格ToolTip内容
DataGridView1.Rows[0].HeaderCell.ToolTipText = "不能修改行单元格的内容";

2) CellToolTipTextNeeded 事件
在体细胞中 ToolTip 在设置时,逐个设置的效率较低, 这段时间是可以利用的。 CellToolTipTextNeeded 事件。当细胞 ToolTipText 在进行更改时也会触发该事件。但是,当DataGridView的DataSource被指定且VirualMode=True未引发该事件。
[C#]
// CellToolTipTextNeeded事件处理方法
private void DataGridView1_CellToolTipTextNeeded(object sender,
DataGridViewCellToolTipT extNeededEventArgs e)
{
e.ToolTipText = e.ColumnIndex.ToString() + ", " + e.RowIndex.ToString();
}

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
⇒ CellContextMenuStripNeed ed、RowContextMenuStripNeede d 事件
利用 CellContextMenuStripNeed ed 事件可以设置单元格右键菜单,尤其但需要右键菜单根据单元格值的变化而变化的时候。比起使用循环遍历,使用该事件来设定右键菜单的效率更高。但是,在DataGridView使用了DataSource已绑定,且为VirtualMode不会引发该事件。

// CellContextMenuStripNeed ed事件处理方法
private void DataGridView1_CellContextMenuStripNeed ed(object sender,
DataGridViewCellContextM enuStripNeededEventArgs 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;
}
}
同样,可以实现RowContextMenuStripNeede d事件来设置该行的右击菜单。

// RowContextMenuStripNeede d事件处理方法
private void DataGridView1_RowContextMenuStripNeede d(object sender,
DataGridViewRowContextMe nuStripNeededEventArgs 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;
}
}

CellContextMenuStripNeed ed在事件处理方法的参数中,e.ColumnIndex=-1指行头,e.RowIndex=-1“表示列标题。RowContextMenuStripNeede d那就没有了“e.RowIndex=-1。

DataGridView 单元格边框和网格线样式的设置:

1) DataGridView 的边界线样式的设置
DataGridView 边界线的风格是直通的。 DataGridView.BorderStyle 要设置的属性。 BorderStyle 该属性设置为
BorderStyle 枚举: FixedSingle(单行,默认),Fixed3D、None。

2) 单元格的边界线样式的设置
单元格边界线的风格是直通的。 DataGridView.CellBorderStyle 要设置的属性。 CellBorderStyle 该属性设置为
DataGridViewCellBorderSt yle 枚举。(详情请参阅) MSDN)
此外, DataGridView.ColumnHeadersBorderStyle 和 RowHeadersBorderStyle 可以修改属性 DataGridView 头部的单元格边框线样式。 该属性设置为 DataGridViewHeaderBorder Style 枚举。(详情请参阅) MSDN)

3单元格边框颜色的设置
可以传递单元格边框线的颜色。 DataGridView.GridColor 要设置的属性。默认是 ControlDarkDark 。但仅限于在 CellBorderStyle 被设定为 Single、SingleHorizontal、SingleVertical 只有在这种情况下才能更改其边界线的颜色。同样,ColumnHeadersBorderStyle 以及 RowHeadersBorderStyle 仅当设置时 Single 颜色只能更改。

4单元格的上、下、左、右边框线分别设置。
CellBorderStyle只能设置单元格所有边框线的样式。如果要单独更改单元格边框一侧的样式,则需要使用它。DataGridView.AdvancedCellBorderStyle属性。例如:
[VB.NET]
单元格的上行和左行被设置为双行。
单元格的底线和右线设置为单线。
DataGridView1.AdvancedCellBorderStyle.Top = _
DataGridViewAdvancedCell BorderStyle.InsetDouble
DataGridView1.AdvancedCellBorderStyle.Right = _
DataGridViewAdvancedCell BorderStyle.Inset
DataGridView1.AdvancedCellBorderStyle.Bottom = _
DataGridViewAdvancedCell BorderStyle.Inset
DataGridView1.AdvancedCellBorderStyle.Left = _
DataGridViewAdvancedCell BorderStyle.InsetDouble

同样,设置行标题单元格的属性为: AdvancedRowHeadersBorder Style,将标题单元格属性设置为:AdvancedColumnHeadersBor derStyle。

DataGridView 单元表示值自定义:

通过CellFormatting事件,则可以自定义单元格的值。(例如:价值Error当为时,单元格设置为红色)
以下示例:Will“Colmn1“将该列的值更改为大写。

//CellFormatting 事件处理方法
private void DataGridView1_CellFormatting(object sender,
DataGridViewCellFormatti ngEventArgs e)
{
DataGridView dgv = (DataGridView)sender;

// 如果单元格是“Column1“列的单元格。
if (dgv.Columns[e.ColumnIndex].Name == "Column1" && e.Value is string)
{
// 将单元格值更改为大写
string str = e.Value.ToString();
e.Value = str.ToUpper();
// 应用该Format,Format完毕。
e.FormattingApplied = true;
}
}

CellFormatting事件的DataGridViewCellFormatti ngEventArgs对象的Value该属性最初保存一个未格式化的值。什么时候Value将该属性设置为表示所使用的文本后,将FormattingApplied属性做为True,告知DataGridView文本已格式化。如果你不这么做,DataGridView将基于已设置的Format,NullValue,DataSourceNullValue,FormatProvider属性会将Value该属性将重新格式化。

DataGridView 当用户进入时,单元格输入值的设置

通过 DataGridView.CellParsing 事件可以设置用户输入的值。下面的例子:当输入英文文本内容时,它立即被更改为大写。

//CellParsing 事件处理方法
private void DataGridView1_CellParsing(object sender,
DataGridViewCellParsingE ventArgs e)
{
DataGridView dgv = (DataGridView)sender;

//该单元格被列为“Column1”时
if (dgv.Columns[e.ColumnIndex].Name == "Column1" &&
e.DesiredType == typeof(string))
{
//将单元格值设置为大写
e.Value = e.Value.ToString().ToUpper();
//解析完毕
e.ParsingApplied = true;
}
}

DataGridView 新行的缺省值设置:

当您需要指定新行的默认值时,您可以。DataGridView.DefaultValuesNeeded在事件中处理。除了设置默认值外,此事件中的处理还可以指定某些单元格ReadOnly属性等。

// DefaultValuesNeeded 事件处理方法
private void DataGridView1_DefaultValuesNeeded(object sender,
DataGridViewRowEventArgs e)
{
// 设置单元格默认值
e.Row.Cells["Column1"].Value = 0;
e.Row.Cells["Column2"].Value = "-";
}

DataGridView在查找过程中,,添加和删除行:

/// 查找指定的字符串单元格

bool bFound = false;

String strFound = toolStrip1_cbxFindString.Text;

int nRows = dataGridView1.Rows.Count - 1;

int nCols = dataGridView1.Columns.Count - 1;

for (int i = 0; i != nRows; i++)

{

for (int j = 0; j != nCols; j++)

{

   if (strFound == dataGridView1.Rows[i].Cells[j].Value.ToString())

   { 

       dataGridView1.CurrentCell = dataGridView1[j, i];

       bFound = true;

       break;

   }

   if (bFound)

   { 

       break;

   }

}

if (bFound)

{

   break;

}

}

if (!bFound)

{

MessageBox.Show("未找到字符串:" + strFound);

}
///
/// 向DataGirdView将行添加到,显示在第一行中,然后选择该行
///
/// DataGridView对向
/// 总列数
/// 要添加的每列的值
public void AddRow(DataGridView dv, int colcount,params string[] colvalues)
{
DataGridViewRow dr = new DataGridViewRow();
dr.CreateCells(dv);
for (int i = 0; i < colcount; i++)
{
dr.Cells[i].Value = colvalues[i];
}
dv.Rows.Insert(0, dr);
dv.CurrentCell = dv.Rows[0].Cells[0];
}
///
/// 删除DV中的指定行
///
/// DataGridView对向
/// 要删除的指定行
public void ReMoveRow(DataGridView dv, int colindex)
{
dv.Rows.Remove(dv.Rows[colindex]);
dv.ClearSelection();
}

}

0、(最基本的技术),在列中获得一行(某单元格)中的内容

this.currentposition = this.dataGridView1.BindingContext [this.dataGridView1.DataSource, this.dataGridView1.DataMember].Position;bookContent = this.database.dataSet.Tables[0].Rows [this.currentposition][21].ToString().Trim();MessageBox.Show(bookContent);

1,自定义列

//定义列宽this.dataGridView1.Columns[0].Width = 80;this.dataGridView1.Columns[1].Width = 80;this.dataGridView1.Columns[2].Width = 180;this.dataGridView1.Columns[3].Width = 120;this.dataGridView1.Columns[4].Width = 120;Customize Cells and Columns in the Windows Forms DataGridView Control by Extending TheirBehavior and AppearanceHost Controls in Windows Forms DataGridView Cells

继承 DataGridViewTextBoxCell 类生成一个新的Cell类,然后继承 DataGridViewColumn 生成新的Column类,并指定CellTemplate为新的Cell班级。新生成的Column可以添加到DataGridView中去。

2,自动适应列宽

Programmatically Resize Cells to Fit Content in the Windows Forms DataGridView ControlSamples:DataGridView.AutoSizeColumns(DataGridViewAutoSizeColu mnCriteria.HeaderAndDisplayedRows);DataGridView.AutoSizeColumn(DataGridViewAutoSizeColu mnCriteria.HeaderOnly,2, false);DataGridView.AutoSizeRow(DataGridViewAutoSizeRowC riteria.Columns,2, false);DataGridView.AutoSizeRows(DataGridViewAutoSizeRowC riteria.HeaderAndColumns,0, dataGridView1.Rows.Count, false);

3,可以绑定和显示对象

Bind Objects to Windows Forms DataGridView Controls

4,可以更改表格线样式

Change the Border and Gridline Styles in the Windows Forms DataGridView ControlSamples:this.dataGridView1.GridColor = Color.BlueViolet;this.dataGridView1.BorderStyle = BorderStyle.Fixed3D;this.dataGridView1.CellBorderStyle = DataGridViewCellBorderSt yle.None;this.dataGridView1.RowHeadersBorderStyle = DataGridViewHeaderBorder Style.Single;this.dataGridView1.ColumnHeadersBorderStyle = DataGridViewHeaderBorder Style.Single;

5,动态更改是否显示列,以及动态更改列的显示顺序

Change the Order of the Columns in the Windows Forms DataGridView ControlSamples:customersDataGridView.Columns["CustomerID"].Visible = false;customersDataGridView.Columns["ContactName"].DisplayIndex = 0;customersDataGridView.Columns["ContactTitle"].DisplayIndex = 1;customersDataGridView.Columns["City"].DisplayIndex = 2;customersDataGridView.Columns["Country"].DisplayIndex = 3;customersDataGridView.Columns["CompanyName"].DisplayIndex = 4;

6,可以在列中显示图像

Display Images in Cells of the Windows Forms DataGridView ControlSamples:Icon treeIcon = new Icon(this.GetType(), "tree.ico");DataGridViewImageColumn iconColumn = new DataGridViewImageColumn ();iconColumn.Image = treeIcon.ToBitmap();iconColumn.Name = "Tree";iconColumn.HeaderText = "Nice tree";dataGridView1.Columns.Insert(2, iconColumn);

7,格式化显示内容:

Format Data in the Windows Forms DataGridView ControlSamples:this.dataGridView1.Columns["UnitPrice"].DefaultCellStyle.Format = "c";this.dataGridView1.Columns["ShipDate"].DefaultCellStyle.Format = "d";this.dataGridView1.DefaultCellStyle.NullValue = "no entry";this.dataGridView1.DefaultCellStyle.WrapMode = DataGridViewWrapMode.Wrap;this.dataGridView1.Columns["CustomerName"].DefaultCellStyle.Alignment =DataGridViewContentAlign ment.MiddleRight;

8,则可以在拖动列的滚动条时冻结指定的列。

Freeze Columns in the Windows Forms DataGridView ControlSamples:修复了指定列和上一列。this.dataGridView1.Columns["AddToCartButton"].Frozen = true;

9,获取选定的单元格,行,列

Get the Selected Cells, Rows, and Columns in the Windows Forms DataGridView ControlSamples:

10,输入时显示错误信息

Handle Errors that Occur During Data Entry in the Windows Forms DataGridView ControlSamples:private void dataGridView1_DataError(object sender,DataGridViewDataErrorEve ntArgs e){// If the data source raises an exception when a cell value is// commited, display an error message.if (e.Exception != null &&e.Context == DataGridViewDataErrorCon text.Commit){MessageBox.Show("CustomerID value must be unique.");}}

11、大数据量显示,使用Virtual Mode

Implement Virtual Mode in the Windows Forms DataGridView Control

12,将指定的列设置为只读

Make Columns in the Windows Forms DataGridView Control Read-OnlySamples:dataGridView1.Columns["CompanyName"].ReadOnly = true;

13,删除自动生成的列

Remove Autogenerated Columns from a Windows Forms DataGridView ControlSample:dataGridView1.AutoGenerateColumns = true;dataGridView1.DataSource = customerDataSet;dataGridView1.Columns.Remove ("Fax");或:dataGridView1.Columns["CustomerID"].Visible = false;

14,自定义选择模式

Set the Selection Mode of the Windows Forms DataGridView ControlSample:this.dataGridView1.SelectionMode = DataGridViewSelectionMod e.FullRowSelect;this.dataGridView1.MultiSelect = false;

15,自定义设置光标进入单元格是否处于编辑模式(编辑模式)

Specify the Edit Mode for the Windows Forms DataGridView Controlthis.dataGridView1.EditMode = DataGridViewEditMode.EditOnEnter;

16时,新行指定缺省值

Specify Default Values for New Rows in the Windows Forms DataGridView ControlSample:private void dataGridView1_DefaultValuesNeeded(object sender, System.Windows.Forms.DataGridViewRowEventArgs e){e.Row.Cells["Region"].Value = "WA";e.Row.Cells["City"].Value = "Redmond";e.Row.Cells["PostalCode"].Value = "98052-6399";e.Row.Cells["Region"].Value = "NA";e.Row.Cells["Country"].Value = "USA";e.Row.Cells["CustomerID"].Value = NewCustomerId();}

17、数据验证

Validate Data in the Windows Forms DataGridView ControlSamples:private void dataGridView1_CellValidating(object sender,DataGridViewCellValidati ngEventArgs e){// Validate the CompanyName entry by disallowing empty strings.if (dataGridView1.Columns[e.ColumnIndex].Name == "CompanyName"){if (e.FormattedValue.ToString() == String.Empty){dataGridView1.Rows[e.RowIndex].ErrorText ="Company Name must not be empty";e.Cancel = true;}}}

18,提交的数据dataset中

DataSet ds = new DataSet("MyDataSet");ds.Tables[biaom.Trim()].Rows.Clear();try{for (int i = 0; i < dataGridView1.Rows.Count - 1; i++){DataTable dt = ds.Tables[biaom.Trim()];DataRow myrow = ds.Tables[biaom.Trim()].NewRow();for (int j = 0; j < dataGridView1.Columns.Count; j++){myrow[j] = Convert.ToString(dataGridView1.Rows[i].Cells[j].Value);}ds.Tables[biaom.Trim()].Rows.Add(myrow);}}catch (Exception){MessageBox.Show("输入类型错误!");return;}

版权声明

所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除