locked
LightSwitch | 強制的に LightSwitch DataGrid でグループ化を試みた RRS feed

  • 全般的な情報交換

  • 良くはないだろうなぁと思いつつ、強制的に LightSwitch DataGrid でグループ化を試みました。

    B <- C <- D という親子関係の Entities を用意し、
    D の一覧を表示する SearchDs Screen 上の DataGrid で以下のように DataGridColumn を作成。


    • B Name ("Other Screen Data..." で作成)
    • C Name (C Summary)
    • D Name


    続いて、以下のように記述。


    partial void SearchDs_Created()
    {
    	this.FindControl("grid").ControlAvailable += (object sender, ControlAvailableEventArgs e) =>
    	{
    		grid = e.Control as DataGrid;
    	};
    }
    
    partial void Ds_Loaded(bool succeeded)
    {
    	grid.Dispatcher.BeginInvoke(() => 
    	{
    		var pcv = new PagedCollectionView(grid.ItemsSource);
    		pcv.GroupDescriptions.Add(new PropertyGroupDescription("C.B.Name"));
    		grid.ItemsSource = pcv; ................................. (1)
    	});
    }


    (1) はやらない方が良いのでしょうがやってみました。
    その結果は以下の通りです。





    DataGrid の内容が表示される前に以下の様なエラーメッセージが出たり出なかったり。





    このエラーは何が原因か不明。


    あくまで試しにやってみたことですが、
    それはやらない方が良い、こうやった方が良い、などの意見がありましたら、お願いします。
    • 編集済み custar 2012年4月10日 11:28
    2012年4月10日 11:26

すべての返信

  • 試しに "Other Screen Data..." で作った B Name を DataGridColumn から消すと、
    以下の通り、グループ化ができなくなります。





    PagedCollectionView に含まれている C の親 (B) が null になってしまうのでしょう。
    WCF RIA Service のように Ds.Include("C.B") と指定できればいいのですが。
    2012年4月10日 11:32
  • LightSwitch で Binding="{Binding Path=C.B.Name}" のようにしても、
    現状 B.Name を取得できていませんが、
    Screen 上に "Other Screen Data..." を使うと取得できていたので、
    それを以下のように見えない形で密かに使います。




    上の DataGrid (Custom Control) は表示用、
    下の DataGrid は C.B.Name 取得用で非表示にしています。

    "Other Screen Data..." で設定した C.B.Name の DataGridColumn があれば、
    それを上の DataGrid でも参照できるようです。
    下図では B Name の Column を表示していませんが、グループ化には使えています。



    • 編集済み custar 2012年4月10日 16:50
    2012年4月10日 16:47