2011-06-23 6 views
2

一部のデータベースにバインドされたdataGridViewを考えてみましょう。 dataGridViewのバインディングソースには、説明フィールドが空の場所のみを示すフィルタがあります。フィルタセットがリストから離れすぎて移動しないようにDataGridViewを停止するにはどうすればよいですか?

ユーザーは、この値を持つレコード、注意が必要なレコードのみを表示するという考えがあります。ユーザーは常にその値を他の値に変更します。

私の問題は、入力キーまたはタブキーのいずれかを使用して次の行に移動した後、次の行に移動した後にほとんどフィルタリングし、その位置を下に移動します。

フィルタリングが発生した後に位置が次の行にスキップしないようにこの動作を制御する方法はありますか?私はそれが解決策であることを認識していますが、この特定の質問のためにデータセットに別々の塗りつぶしをしたくありません。可能であれば、より良いフィルタリングを制御する方法を知りたいと思います。

EDIT私はDataGridViewのに任意のイベントを配線していないことは注目に値する

が、これは、フォーム上にコントロールをドラッグし、それに結合したソースをフックのアウトオブボックスの動作ですデータセットから取得し、データセットをform_loadイベントに入力します。

EDIT現在の動作の

例 - (C)は、行番号2でカーソル位置を

ユーザキー名を表し、TRUE

R1 - John Doe  FALSE 
R2 - Jane Doe  TRUE (C) 
R3 - Rob Doe  FALSE 
R4 - Joe Doe  FALSE 

ユーザプレスリターンに状態を設定します(またはタブ、この例では入力するものは関係ありません)

R1 - John Doe  FALSE 
R3 - Rob Doe  FALSE 
R4 - Joe Doe  FALSE (C) 

現在選択されている行が現在行3になっている行4になっています。R2の値をfalseからtrueに変更していないと、フィルタリングされず、正しく行3に移動します。

編集

私はこの問題に適した解決策を受け取っていないため、これを死んでから復活させます。誰もそこに創造的なアイデアを持っていますか?^_^

+0

+1よく質問が書かれています。 –

答えて

1

少し前にDataGridViewと同じ問題がありました。
Enterキーの動作を変更して、選択した行を下に移動するのではなく、上に移動したいとしました。ここに私がしたことがあります、私はそれがあなたを助けることを願っています私はDataGridViewを継承するコントロールを作成し、ProcessCmdKeyをオーバーライドし、その変更を行いました。あなたの場合、次のようにしてください:

public partial class MyDataGridView : DataGridView 
{ 
    protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
    { 
     if (keyData == Keys.Tab || keyData == Keys.Enter) 
     { 
      return true; 
     } 

     return base.ProcessCmdKey(ref msg, keyData); 
    } 
} 

これにより、EnterまたはTabを押したときにgridViewが次の行に移動しなくなります。私はそれがあなたのために働くことを願っています、もしそれが問題であると言いたくないならば。

+0

これは確かに私が探しているものではない、どこかに移動するのをユーザーが止めさせ、彼らはまだ次の行にタブする必要があります。私は、フィルターを入れて、ユーザーの行を、行を追加する行ではなく、行を挿入する必要がある行に戻すようにしたいと思います。これは、特定の基準が変更された場合にのみ、行が常にフィルタリングされるわけではないため、注意する必要があります。 – Mohgeroth

+0

のように値をそのまま残す理由はいくつかあります。必要なセルを選択するコードを書く前に、このコードを変更することができます。このようにDataGridView.Row [index] .Cells [index] .Selected = trueのようにカーソルを移動させたいセルを作成します。あなたが何をしたいのかを説明すれば、私はあなたのようなものを書くことができます。 – IordanTanev

+0

問題は、フィルタを有効にするためにはその行を残す必要があることです。ユーザーが進行できない場合は、そのレコードをフィルタリングしません。そのレコードをフィルタリングして次のレコードにカーソルを置く必要があります。残念ながら、フィルタが更新を完了するとカーソルは2つのレコードに移動します – Mohgeroth

関連する問題