如何禁用在DataGridView中select的能力?

我想使用我的DataGridView只显示的东西,我希望用户不能够从DataGridViewselect任何行,字段或任何东西。

我怎样才能做到这一点?

我会去这个:

 private void myDataGridView_SelectionChanged(Object sender, EventArgs e) { dgvSomeDataGridView.ClearSelection(); } 

我不同意广泛的断言,没有DataGridView应该是不可选的。 一些用户界面是为工具或触摸屏而build立的,并且允许select误导用户认为select实际上将它们放到某个地方。

在控件上设置ReadOnly = true对于是否可以select单元格或行是没有影响的。 并且有设置Enabled = false可视化和function缺点。

另一个select是将控件select的颜色设置为非select的颜色,但是如果恰巧是在操作单元格的背景颜色,那么此方法也会产生一些令人讨厌的结果。

您可以为所选单元格设置透明背景颜色,如下所示:

 DataGridView.RowsDefaultCellStyle.SelectionBackColor = System.Drawing.Color.Transparent; 

我通过将Enabled属性设置为false来解决这个问题。

使用DataGridView.ReadOnly属性

MSDN示例中的代码说明了在主要用于显示DataGridView控件中使用此属性。 在这个例子中,控件的可视外观以几种方式定制, 控件被configuration为有限的交互性

观察示例代码中的这些设置:

 // Set property values appropriate for read-only // display and limited interactivity dataGridView1.AllowUserToAddRows = false; dataGridView1.AllowUserToDeleteRows = false; dataGridView1.AllowUserToOrderColumns = true; dataGridView1.ReadOnly = true; dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect; dataGridView1.MultiSelect = false; dataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.None; dataGridView1.AllowUserToResizeColumns = false; dataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing; dataGridView1.AllowUserToResizeRows = false; dataGridView1.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.DisableResizing; 

这对我来说就像一个魅力:

 row.DataGridView.Enabled = false; row.DefaultCellStyle.BackColor = Color.LightGray; row.DefaultCellStyle.ForeColor = Color.DarkGray; 

(where row = DataGridView.NewRow(适当的重载);)

我发现设置所有AllowUser...属性为falseReadOnlytrueRowHeadersVisiblefalseScollBarsNone ,然后伪装预防select对我最有效。 未将Enabled设置为false仍允许用户从网格复制数据。

当你想要一个简单的显示网格(假定行高度相同)时,下面的代码也清理了外观:

 int width = 0; for (int i = 0; i < dataGridView1.Columns.Count; i++) { width += dataGridView1.Columns[i].Width; } dataGridView1.Width = width; dataGridView1.Height = dataGridView1.Rows[0].Height*(dataGridView1.Rows.Count+1); 

Enabled属性为false

要么

 this.dataGridView1.DefaultCellStyle.SelectionBackColor = this.dataGridView1.DefaultCellStyle.BackColor; this.dataGridView1.DefaultCellStyle.SelectionForeColor = this.dataGridView1.DefaultCellStyle.ForeColor;