web-dev-qa-db-ja.com

DataGridViewの最初の列、最初の行がロード時に選択されていますが、これは必要ありません

したがって、基本的には最初の行の最初の列が常に選択されています。グリッドビューに選択されたセルがないようにする方法を理解できません。何か助けは?

24
Spooks

私はこれと同じ問題を抱えていて、何も機能していませんでした。私にとってうまくいった解決策は、「Tabstop」プロパティをFalseに設定し、データバインドの直後にClearSelection()メソッドを呼び出すことでした。

20
DaneAnthony

私自身、これに関してかなりのトラブルを抱えていました。アプリケーション/フォームの読み込み時に入力されるDataGridViewを持つユーザーコントロールがあります。最初の行の選択が行われるようですデータバインディングが完了し、グリッドにデータが入力/レンダリングされます。ユーザーコントロールの読み込みイベント(およびおそらくフォームの読み込み)はその前に発生します。そのため、これらの読み込みイベントでgridView.ClearSelection()を呼び出したり、gridView.CurrentCellを無効にしても、実質的な影響はありません。

最終的に私のために働いたのはDataGridView自体のDataBindingCompleteイベントから.ClearSelection()を呼び出すことでした。これは魅力のように働きました。

31
Dave Marley

DGVのデータバインド後に、DGVのCurrentCellプロパティをnullに設定します。

dataGridView1.CurrentCell = null; 

これを行っても、行とセルの選択に関連付けられたDGVイベントが発生するのを防ぐことはできません。次のように、RowEnterイベントに選択した行またはセル数のチェックを追加する必要があります。

private void dataGridView1_RowEnter(object sender, DataGridViewCellEventArgs e) {
    if (dataGridView1.SelectedRows.Count == 1) {
        // Do stuff since a row is actually selected ...
    }
}
5
Jay Riggs

呼び出す必要があります:ClearSelection after event:DataBindingComplete

1
user2272788

読み取り専用のDataGridViewも必要でした。私の場合、別のスレッドがゆっくりとデータを取得し、マルチスレッドリストとフォームタイマーを介してGUIスレッドにデータを渡しています。このアプローチでは、GUIスレッドは、参照を許可しながら、必要に応じてデータグリッドを拡張します。

上記の提案を使用すると、選択を非表示にできますが、GUIスレッドが選択でdataGridView.Rows.Add()を呼び出したときにセルがリセットされるのを防ぐことはできません。これには、選択を防ぐためのイベントのフック、および編集モードの無効化が含まれます。

私が欲しかった行動を見つけました

dataGridView.AllowUserToAddRows = false;

これで、動的にサイズ設定され、非同期で読み込まれる読み取り専用のデータグリッドができました。

進行は私の読み込みコードにかなりの負担があるため、BackgroundWorkerソリューションは好きではありませんでした。また、グリッドが更新されるたびに新しいDataTableを再構築するという要件も気に入りませんでした。構築されている1つのDataTableでDataGridViewを更新するためのヒントは見つかりませんでしたが、これは可能であるようです。

0
jws

データをバインドした後、呼び出すだけ

dataGridView.ClearSelection();

DataGrindViewにデータを設定する前にそれを呼び出そうとしたと思います。

0
Minimihi

Qを理解している場合。これにより、データバインディング後にセルが選択された状態で表示されなくなります。そのため、背面の色は白のままです。列を編集してそこに設定することもできます。

DataGridView.DefaultCellStyle.SelectionBackColor = DataGridView.DefaultCellStyle.BackColor;
0
CW1255

フォームコンストラクターからデータをロードするメソッドを呼び出していないことを確認してください。 form.load()から呼び出す場合

また、datagridviewがロードされた後、これを行います

DataGridView.Rows[0].Selected = false;
0
Dennis Collins

ほとんどの場合、これは小さなミスが原因で発生します。グループボックスにdatagridviewが設定されている可能性があります。グループボックスがさらにある場合、選択は最初のグループボックスで停止するため、グループボックスを優先度に従って保持します。

0
gireesh mohan

私の場合も、最初の行の可視性をfalseに設定する代わりに同じ問題がありました。 SelectionChanged Eventのリスクを回避するために、GridColor値を設定することをお勧めします。

  1. DataBindingComplete Eventにdgv.ClearSelection()を置き、GridColorをDataGridView BackColorに設定します。

  2. グリッドの色を、populateメソッドまたは発砲イベントの表示色(例:灰色)に設定します。

0
Robert Timothy