68

自分DataGridViewだけを使って物事を表示したいのですが、ユーザーが行、フィールド、またはから何かを選択できないようにしたいのDataGridViewです。

これどうやってするの?

4

12 に答える 12

138

私はこれで行きます:

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

DataGridViewnoを選択不可にするべきだという幅広い主張には同意しません。一部の UI はツールやタッチスクリーン用に構築されており、選択を許可すると、ユーザーは、選択すると実際にそれらがどこかに到達すると誤解されます。

コントロールの設定ReadOnly = trueは、セルまたは行を選択できるかどうかには影響しません。また、設定には視覚的および機能的な欠点がありますEnabled = false

もう 1 つのオプションは、コントロールの選択された色を、選択されていない色とまったく同じになるように設定することですが、セルの背景色を操作している場合、この方法でも厄介な結果が生じます。

于 2012-12-19T15:29:00.893 に答える
19

次のように、選択したセルに透明な背景色を設定できます。

DataGridView.RowsDefaultCellStyle.SelectionBackColor = System.Drawing.Color.Transparent;
于 2014-10-02T07:19:02.053 に答える
3

Enabledプロパティを に設定することでこれを修正しましたfalse

于 2012-12-19T08:48:02.647 に答える
0

理論的にはuser4101525の回答が一番気に入りましたが、実際には機能しません。選択はオーバーレイではないので、コントロール下にあるものは何でも見ることができます

Ramgy Borja's answer は、デフォルトのスタイルが実際にはまったく色ではないという事実を扱っていないため、それを適用しても役に立ちません。これはデフォルトのスタイルを処理し、独自の色を適用する場合に機能します (これは edhubbell が厄介な結果と呼んでいるものかもしれません)。

dgv.RowsDefaultCellStyle.SelectionBackColor = dgv.RowsDefaultCellStyle.BackColor.IsEmpty ? System.Drawing.Color.White : dgv.RowsDefaultCellStyle.BackColor;
dgv.RowsDefaultCellStyle.SelectionForeColor = dgv.RowsDefaultCellStyle.ForeColor.IsEmpty ? System.Drawing.Color.Black : dgv.RowsDefaultCellStyle.ForeColor;
于 2018-07-16T16:24:49.983 に答える
-3

プロパティを使用するDataGridView.ReadOnly

MSDNの例のコードは、主に表示を目的とDataGridViewしたコントロールでのこのプロパティの使用法を示しています。この例では、コントロールの外観はいくつかの方法でカスタマイズされており、コントロールは限られた対話性のために構成されています

サンプルコードで次の設定を確認してください。

// 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;
于 2012-07-04T15:36:18.470 に答える