2009-07-09 31 views
2

私はデータを入力するときに最初の項目がデフォルトで選択されるWinForm DataGridViewを持っています。アイテムが選択されたときにイベントが発生し、いくつかのコードが実行されたときにこれを発生させたくありません。私がこれを持っている解決策は、新しいデータバインド後にイベントが最初に発生したときに、イベントをアンフックバインドして再読み込みするか、またはフラグを変更することです。しかし、もう少しエレガントなものがあるのだろうかと思っていました。DataGridViewが最初の項目を選択しないようにする

答えて

2

私はwinformsアプリをテスト用に開いていませんが、あなたのデータとDataGridviewの間にBindingSourceが介在しているのが不思議です。その場合、何を設定すればいいですか

List<Data> data = GetMyData(); 
BindingSource myBindingSource = new BindingSource(); 
myBindingSource.DataSource = data; 
myBindingSource.position = -1; 
myGrid.DataSource = myBindingSource; 

データとUIの間にBindingSourceオブジェクトを介入すると便利なことがよくあります。これは、List <>オブジェクトではなくDataTableオブジェクトをデータとして使用することに慣れていますが、多くのランダムな問題を修正するのに役立ちそうです。

+0

私のバインディングソースは総称リストです。 – jwarzech

+0

しかし、いつでもBindingSourceオブジェクトに介入することができます。私は秒を与え、私が意味するもので答えを更新します。 – Clyde

+0

これは動作しません。 'myBindingSourceの設定。Position = -1; '直ちにそれを読み取ると、-1ではなく0が表示されます。 – styfle

0

使用次の例のようなもの:もちろん

 dataGridView.Columns[0].Selected = false; 
     dataGridView.Rows[0].Selected = false; 
     dataGridView.Rows[0].Cells[0].Selected = false; 

ように行、列、およびがある場合は、確認してください。それは単なる例です。

2

何(申し訳ありませんが、VB.NETが、私はあなたが変換できると確信している)について:

myGrid.ClearSelection() 
2

私は(私はSelectionChangedイベントを使用していない)と同様の問題を抱えていたし、これがために働きます私:バインディングが設定された後に、コンストラクタで

、DataBindingCompleteイベントにハンドラを追加します。

dgvCommandos.DataSource = systeemCommandos; // = my List<> of objects 
dgvCommandos.DataBindingComplete += new DataGridViewBindingCompleteEventHandler(dgvCommandos_DataBindingComplete); 

ハンドラ:

void dgvCommandos_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e) 
{ 
    dgvCommandos.ClearSelection(); 
} 

行を選択する場合は、

これを基に、私はユーザーの選択に応じて他のイベントを処理することが可能だと思います。お役に立てれば。

0
かなり遅く

が、私はそれは私のために働いてしまっただけで、私の方法(などのTextBox、コンボボックス、多くののBindingSource経由で私のDataGridViewにバインド):私のコントロールにデータ連結を初期化し、データをロードした後

DataGridViewのに私はバインディングが中断された場合、私がチェック私のRowHeaderMouseClickイベントで結合

bindingSource.SuspendBinding(); 

を中断しなければなりませんでした。もしそうなら、それを再開する:

if(bindingSource.IsBindingSuspended) 
    bindingSource.ResumeBinding(); 

この方法で私はロードを完了し、(私の場合ソート可能するBindingListに)データの結合、ユーザーになく、選択されていないレコードにデータを表示することができます。

これは少なくとも誰にでも役立ちます。

関連する問題