0

私はデスクトップ アプリケーション (VB.NET) に取り組んでいます。Dev Express Xtra Grid を使用したフォームがあります。グリッド内で、最初の列をバインドされていないチェック ボックス (リポジトリ アイテム) として持っています。現在、ユーザーがチェックボックスをオン/オフにして行を選択できるように機能を作成しました。

私が達成したいことは次のとおりです。

  1. フォームにボタンがあります。チェックボックスがチェックされていない場合は、ボタンを無効にする必要があります。それ以外の場合は有効にする必要があります。デフォルトでは、フォームが読み込まれると、すべてのチェック ボックスがオンになり、ボタンが有効になります。ユーザーは、すべてのチェック ボックスをオフにすることができます。では、ボタンを有効/無効にするために、チェックボックスがオンになっているかどうかを確認するにはどうすればよいですか。

  2. ボタン クリック イベントで、チェック ボックスがオンになっているすべての行の ID (チェック ボックスの横にあるグリッド内の列) を取得したいと考えています。

最初にグリッド内のすべての行の for ループを作成し、次にチェック ボックスの for ループを作成して、チェック ボックスがオンになっているかどうかを確認する必要があるという考えがあります。ただしまとめて作ってません。

問題を解決するために私を助けてください。

ありがとう

4

2 に答える 2

0

XtraGrid GridControl を使用している場合は、GridControl に含まれるエディターである GridView をさらに処理する必要があります。

通常、データを GridControl の DataSource プロパティにバインドしますが、ユーザー エクスペリエンスのために使用する他のイベントとプロパティのほとんどは、GridView 自体に関連しています。

GridView で取得できる便利なメソッドとプロパティには、、、、などがありFocusedRowHandleます。FocusedColumnGetFocusedRow()

したがって、そのボタンのクリックイベントを登録するときは、そのメソッド内で、グリッドビューへの参照を保存します。

private void SomeButtonClick(object sender, EventArgs e)
{
     var gridView = this.whateverYourGridViewIsNamedGridView;

     //Now, you can access the methods and properties of the gridView...

     //Say you want to obtain the focused row's handle
     var rowHandle = gridView.FocusedRowHandle;

     //Or, in your case, if you want to iterate through the rows or columns...
     for(GridColumn column in gridView.Columns)
     {
          if(condition)
          {
               //Do something
          }
     }
}

シナリオに基づいて、デザイナーを再度開くことをお勧めします。左下で、[インプレース エディター リポジトリ] をクリックします。ここが表示されるはずCheckEditです。を選択するCheckEditと、小さな稲妻をクリックしてエディタのイベントにアクセスできるはずです。エディターのチェック状態が変更されるたびに発生するCheckStateChangedイベントまたはイベントに登録します。CheckedChanged

ここから、ドメインオブジェクトまたはビューモデルにブール値を追加して、そのドメインオブジェクトをブール値で装飾しisCheckedます。このようにして、チェックイベントが発生したときに、このブール値の設定を処理できます...例:

private void CheckEventFiring(object sender, EventArgs e)
{
    //Get the currently focused row and cast it to your object
    //This will expose all the properties, including the aforementioned boolean value
    var currentRow = gridView.GetFocusedRow() as YourDomainObject; 

    //Based on checked state...
    currentRow.IsChecked = //Checked or Unchecked    
}

これを設定したので、ボタンをクリックすると、次のようなことを行うことで、グリッド コントロールのデータ ソースから「チェックされている」すべての項目を取得できます...

var dataSource = gridControl.DataSource as List<YourDomainObject>().Where(x => x.IsChecked);

これで、項目がチェックされた行のデータのみが得られました。チェック状態がチェックされていない場合、オブジェクトのブール値は false である必要があり、チェックされている場合は true である必要があります。

これが理にかなっているのかどうか教えてください。Dev Express の習得には少し時間がかかりますが、習得すれば非常に簡単です。

于 2013-08-06T02:03:55.100 に答える
0

「Dev Express Xtra Grid」についてよくわかりません。それでもデータグリッドを使用する場合

最初に変数を宣言して初期化します。たとえば、flag - false から false にします。

これで、グリッド内の行数までループし続ける for ループを使用できます

ループ内で、「現在の列」のチェックボックスがオンになっているかどうかを確認します

チェックされている場合はフラグを true に設定し、ループから抜けます 。それ以外の場合はループを 続行します。

flag=false の場合は現在のフラグ値をループ チェックした後、ボタンを無効にし、それ以外の場合はボタンを有効にします。

2 番目の質問については、同じループを実行して、

ループ内で、現在の行がチェックされているかどうかを確認します。true の場合は id 列の値を取得し、それ以外の場合は続行します。

このロジックが役立つと思います。:)

于 2012-11-02T08:42:18.070 に答える