基礎となるデータセットの繰り返しの変更に対して最適化された、.NET 用のデータ対応グリッドを探しています。ほとんどすべてのグリッドでデータソースを変更できるため、そのコンテキストでの最適化の意味を示す例を示します。しかし、OCX の時代にさかのぼると、データソースを変更すると、データ対応グリッドに問題が発生しました。
このデータベース対応のデータ駆動型グリッドは、整数の行ハンドルを使用してはなりません。GUID 行ハンドルを使用する必要があります。これが、このグリッドの最も重要な要件です。
基になるデータセットの各行には、整数ではなく GUID の rowHandle が割り当てられます。データ行がどのように並べ替えられたりグループ化されたりしても、データ行の GUID の rowHandle は保持され、データ行はその rowHandle によって即座に取得できます。
グリッドのFocusedRowChangedイベントは、現在フォーカスされている行の GUID が、最後にフォーカスされた行の GUID と異なる場合に発生します。 [編集: 整数行ハンドルを使用するグリッドでは、データソースが変更されたときに FocusedRowChanged イベントが発生しないことがよくあります。これは、focused-row-position が変更されていないためです。たとえば、データソースの変更前は最初の行にフォーカスがあり、データソースの変更後は最初の行にフォーカスがあります。基礎となる行データが完全に異なっていても、整数行ハンドルは同じです。]
私は、グリッドがその動作において真にデータを認識し、データ駆動型であることを望んでいます。例えば
Grid.GroupByColumnNames = {"customername","city"};
Grid.Groups["customername"].ExpandedValues = {"Acme Widgets", "Foo Industrial"};
Grid.Groups["city"].ExpandedValues = {"New York","Miami"};
ここで、上のグリッドの下にあるデータセットをクリアし、そのデータソースを別のデータセットに置き換えた場合、そのデータソースには顧客名と都市の列があり、その列に Acme Widgets と Foo Industrial の値が含まれていました。グリッドは新しいデータセットを顧客名でグループ化します。および市の列を展開し、それらの会社を展開します (PreserveGroupingsWhenDataSetChanges フラグが True に設定されている場合)。