2012-07-04 46 views
40

私は自分のDataGridViewを使って物を見せたいと思っています。私は、ユーザーがDataGridViewから行やフィールドなどを選択できないようにしたいと思っています。DataGridViewで選択する機能を無効にするにはどうすればよいですか?

どうすればいいですか?

+1

に選択することができない)は、ユーザーに(非常に迷惑本当に悪いユーザーインターフェイスのデザインです。ユーザーがレポートから何かをコピーしたい場合はどうなりますか?私は読み取り専用で十分であると思う(下記の回答に記載)。 – banging

答えて

1

使用DataGridView.ReadOnly property

MSDN exampleのコードは、主ディスプレイを意図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; 
+2

もし私が投票できたら、私はそうするでしょう。まだ十分な担当者がいない。しかし、読み取り専用は、ユーザーがセルを選択するのを防ぐために何もしません。 – JSON

+0

@JSON - 投票を上下に気にしないでください。代わりに地域社会から学ぶことができる解決策を持つことは素晴らしいことでしょう。 –

2

私はfalseEnabledプロパティを設定することにより、これを修正しました。

+5

まだチェックされていませんが、データグリッドビューを無効にすると視覚効果が失われると思います。 –

+0

確かに働いていますが、@MahdiTahsildariのように、あなたはグレーアウトされたインターフェースを得るでしょう。 – C4u

+0

注意:DoubleClickのようなイベントもありません。 – SenioreT

91

私はこれでいいと思う:

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

私はDataGridViewは選択不可あってはならないという広義の主張に同意しません。いくつかのUIは、ツールやタッチスクリーンのために作られています。そして、選択は実際にそれらをどこかに得ることをユーザーに誤解させる可能性があります。

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

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

+0

質問「選択した行の背景色を変更するにはどうすればよいですか?選択した行の背景色と前景色を設定する方法を説明しています。Question
これは私のために十分機能しました。 – user1036944

+0

Hmm ..すべてのVB.NETコードの回答がC#に編集されているのだろうかと思っています。 – edhubbell

+0

これはより良いです:) –

1

私はその後faking the prevention of selectionが私のために最善を働いた、NoneからScollBarsfalseからRowHeadersVisibletrueReadOnlyfalseにすべてAllowUser...のプロパティを設定することが分かりました。 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); 
9

あなたは次のように選択されたセルの背景色を透明に設定ことがあります。

row.DataGridView.Enabled = false; 

row.DefaultCellStyle.BackColor = Color.LightGray; 

row.DefaultCellStyle.ForeColor = Color.DarkGray; 

(行=のDataGridView:

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

これは魔法のように私のために働きました。NewRow(適切な過負荷);)

1

Enabledプロパティfalse

または

this.dataGridView1.DefaultCellStyle.SelectionBackColor = this.dataGridView1.DefaultCellStyle.BackColor; 
this.dataGridView1.DefaultCellStyle.SelectionForeColor = this.dataGridView1.DefaultCellStyle.ForeColor; 
関連する問題