AutoGenerated列とIEnumerableItemsSourceを含む列ヘッダーDataGridをクリックして行を並べ替えます

ラファエルAMS

リフレクション(methodDefinition.Invoke(..))によってitemsSourceを埋めるデータグリッドを使用している場合、ターゲットメソッドはIQueryable <T>を返します。Tは実行時に既知のEntityTypeです。

戻り値の型はIQueryable <T>であり、これを行うとIQueryable <T>はIEnumerableを実装するためです。

dataGrid1.ItemsSource = methodQuery.Invoke(instance, parameters) as IEnumerable<object>;

行と列を確認することはできませんが(さらにAutoGeneratingColumnsイベントがスローされるため、列を管理できます)、ヘッダーをクリックして行を並べ替えることはできません。

それから私はこれをやろうとしました:

dataGrid1.ItemsSource = methodQuery.Invoke(instance, parameters) as List<object>;

しかし、予想どおり、「Model.Tab_001」から「object」に汎用型を直接キャストできないという例外がスローされます。

また、実行時に結果をList <T>に変換しようとしました(IEnumerable.ToList()の拡張により、ソースをList <T>に変換する関数を実装するデリゲートを作成しました)が、Tはランタイムとオブジェクト(methodDefinition.invokeから返される)は、このメソッドを使用する前に、タイプTの明示的な宣言なしに拡張子.ToList()を使用することはできません。

@edit:同じIEnumerable <オブジェクト>(datagridで動作している)とToList()拡張メソッドでこのメソッドを使用すると、datagridは空白行で埋められ、AutoGeneratingColumnsが起動されません。したがって、結果を見ることができず、空白行でいっぱいのdataGridだけです。

また、結果をObservableCollectionに変換しようとしましたが、リストで同じ問題が発生しました。

データグリッドのItemsSoureとしてリストを使用する横の列ヘッダーをクリックして、データグリッドの行を並べ替える別の方法はありますか?

ラファエルAMS

私はそれを行うためのより簡単な方法を見つけました。

dataGridをAutoGenerateColumnsに設定する代わりに、プロパティ通知機能をdataGridのItemsSourceに設定し、IEnumerable <object>への直接キャストで埋めてからToList()拡張機能を使用しました。

データソースが変更されるたびに、適切なヘッダーとバインディングを使用して列を手動で追加します。

これで、列ヘッダーをクリックして行を並べ替えることができます。

コード:

...
dataGrid1.ItemsSource = (IEnumerable<object>)methodQuery.Invoke(instance, parameters).ToList();
...

..。

private void DataGridItemsSourceChanged(object sender, EventArgs e)
{
        var currentDataGrid =  (DataGrid)sender;

        foreach (TSpe_Reg reg in tabItemSourceChange.TSpe_Reg) // tabItemSourceChange is used to check the table and field names, since im using reflection.
        {
            string headerName = "";
            if (reg.a_short_name != "")
                headerName = reg.a_short_name;
            else
                headerName = reg.a_full_name;
            string boundColumn = "a_" + reg.a_field_name + "_" + tabItemSourceChange.a_table_name;
            DataGridTextColumn ColumnDataGrid = new DataGridTextColumn { Header = headerName, Binding = new Binding(boundColumn) };

        }
}


// Calls the DataGridItemsSourceChanged whenever the DependencyProperty ItemsSource is changed.
private void CallItemSourcePropertyDescriptor(DataGrid currentDataGrid)
    {
        var dpd = DependencyPropertyDescriptor.FromProperty(ItemsControl.ItemsSourceProperty, typeof(DataGrid));
        if (dpd != null)
        {
            dpd.AddValueChanged(currentDataGrid, DataGridItemsSourceChanged);
        }
    }

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Datatablesテーブルヘッダースパンをクリックしたときの列の並べ替えを有効/無効にします

分類Dev

数値と文字列値を持つ列のテーブルヘッダーをクリックしてReactテーブルを並べ替える

分類Dev

ヘッダークリックでテーブル列を並べ替えますか?

分類Dev

ヘッダーをクリックしてテーブルの列を昇順または降順で並べ替える方法

分類Dev

QML列のヘッダーをクリックするだけでtableViewを並べ替える方法

分類Dev

グリッドビューの列に基づいて並べ替えを実行したいのですが、HeaderTempleteのヘッダーをクリックしてもイベントが発生しません

分類Dev

実行時に列を並べ替えると、DataGridViewの行ヘッダー番号が消えます

分類Dev

「すべて選択」チェックボックスをクリックしてヘッダーと列の並べ替えに影響を与えないようにする方法

分類Dev

Pandas dfは、整数インデックスリストに従って行と列を並べ替えます

分類Dev

使用可能なすべてのヘッダーのリストを使用して、ヘッダーに基づいて列を並べ替える方法は?

分類Dev

別の列の並べ替えアイコンをクリックして列を並べ替える

分類Dev

PyQt5:QHeaderViewのヘッダーをクリックしたときにQTableViewを並べ替える方法は?

分類Dev

クイックソートを使用して、2次元配列を列で並べ替えます

分類Dev

ビューコレクションソースのソースを変更すると、WPFDataGrid列ヘッダーの並べ替え矢印が消えます

分類Dev

配列をすばやく並べ替えて、インデックスと要素の配列を返します

分類Dev

列のヘッダークリックから並べ替え機能を分離する正しい方法は何ですか?

分類Dev

ヘッダーをクリックしたときの特別な並べ替え ListView

分類Dev

ヘッダーのfloatサフィックスに基づいてデータフレームの列を並べ替えます

分類Dev

linq文字列比較子を使用したヘッダークリックでのデータグリッドビューの並べ替え

分類Dev

表の見出しをクリックして配列を並べ替える

分類Dev

配列を使用してリストボックス内のアイテムを並べ替えますか?

分類Dev

文字列として数値を含むNSDictionariesを使用してNSMutableArrayを並べ替えますか?

分類Dev

アルファベットと数字を含む名前プロパティを使用してオブジェクトの配列を並べ替える

分類Dev

ui-grid列ヘッダーから並べ替えメニューを削除します

分類Dev

テーブルソーターの列の並べ替えが、テーブルヘッダーのチェックオールチェックボックスを上書きしています

分類Dev

ヘッダー変数値を含むクエリ文字列を渡すことができません

分類Dev

リストからヘッダーをプルし、ヘッダーを並べてリスト要素を含むDataFrameを作成します

分類Dev

列のすべての合計を含むパンダデータフレームに行を追加し、行を最大値で並べ替える方法

分類Dev

R:文字と数値の両方を含む文字列のベクトルをアルファベットと数値の両方で並べ替えます

Related 関連記事

  1. 1

    Datatablesテーブルヘッダースパンをクリックしたときの列の並べ替えを有効/無効にします

  2. 2

    数値と文字列値を持つ列のテーブルヘッダーをクリックしてReactテーブルを並べ替える

  3. 3

    ヘッダークリックでテーブル列を並べ替えますか?

  4. 4

    ヘッダーをクリックしてテーブルの列を昇順または降順で並べ替える方法

  5. 5

    QML列のヘッダーをクリックするだけでtableViewを並べ替える方法

  6. 6

    グリッドビューの列に基づいて並べ替えを実行したいのですが、HeaderTempleteのヘッダーをクリックしてもイベントが発生しません

  7. 7

    実行時に列を並べ替えると、DataGridViewの行ヘッダー番号が消えます

  8. 8

    「すべて選択」チェックボックスをクリックしてヘッダーと列の並べ替えに影響を与えないようにする方法

  9. 9

    Pandas dfは、整数インデックスリストに従って行と列を並べ替えます

  10. 10

    使用可能なすべてのヘッダーのリストを使用して、ヘッダーに基づいて列を並べ替える方法は?

  11. 11

    別の列の並べ替えアイコンをクリックして列を並べ替える

  12. 12

    PyQt5:QHeaderViewのヘッダーをクリックしたときにQTableViewを並べ替える方法は?

  13. 13

    クイックソートを使用して、2次元配列を列で並べ替えます

  14. 14

    ビューコレクションソースのソースを変更すると、WPFDataGrid列ヘッダーの並べ替え矢印が消えます

  15. 15

    配列をすばやく並べ替えて、インデックスと要素の配列を返します

  16. 16

    列のヘッダークリックから並べ替え機能を分離する正しい方法は何ですか?

  17. 17

    ヘッダーをクリックしたときの特別な並べ替え ListView

  18. 18

    ヘッダーのfloatサフィックスに基づいてデータフレームの列を並べ替えます

  19. 19

    linq文字列比較子を使用したヘッダークリックでのデータグリッドビューの並べ替え

  20. 20

    表の見出しをクリックして配列を並べ替える

  21. 21

    配列を使用してリストボックス内のアイテムを並べ替えますか?

  22. 22

    文字列として数値を含むNSDictionariesを使用してNSMutableArrayを並べ替えますか?

  23. 23

    アルファベットと数字を含む名前プロパティを使用してオブジェクトの配列を並べ替える

  24. 24

    ui-grid列ヘッダーから並べ替えメニューを削除します

  25. 25

    テーブルソーターの列の並べ替えが、テーブルヘッダーのチェックオールチェックボックスを上書きしています

  26. 26

    ヘッダー変数値を含むクエリ文字列を渡すことができません

  27. 27

    リストからヘッダーをプルし、ヘッダーを並べてリスト要素を含むDataFrameを作成します

  28. 28

    列のすべての合計を含むパンダデータフレームに行を追加し、行を最大値で並べ替える方法

  29. 29

    R:文字と数値の両方を含む文字列のベクトルをアルファベットと数値の両方で並べ替えます

ホットタグ

アーカイブ