2011-07-07 23 views
2

多くのことは言うまでもありませんが、ちょうど私がLookUpEditを持っているDXGridのインスタンスが必要です。 私はWPFを使用しています。LookupEdit(Devexpress)でGridControlのインスタンスを取得する方法

mylookupedit1.GridControl < - ???

EDITED:ここ

は、いくつかのサンプルコードです:

<UserControl.Resources> 
    <ControlTemplate x:Key="gridTemplate"> 
     <dxg:GridControl x:Name="PART_GridControl">  
      <dxg:GridControl.View> 
       <dxg:TableView Name="view" 
        AutoWidth="False" 
        BestFitMode="AllRows" 
        BestFitArea="All" 
        AllowBestFit="True"/> 
      </dxg:GridControl.View> 
     </dxg:GridControl> 
    </ControlTemplate> 
</UserControl.Resources> 
<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto"/> 
     <RowDefinition Height="6"/> 
     <RowDefinition Height="auto "/> 
    </Grid.RowDefinitions> 

    <dxe:ButtonEdit Grid.Row="0" Name="beSearch"/> 
    <dxg:LookUpEdit Grid.Row="2" Name="leLookUp" 

       ShowSizeGrip="True" 
       SelectedIndex="0" 
       AutoPopulateColumns="True" 

       IsPopupAutoWidth="True" 

       ItemsSource="{Binding}" 
       PopupMaxWidth="600" 
       PopupContentTemplate="{StaticResource gridTemplate}"  
        />   

</Grid> 

と私は私のコードで:

private void mymethod(IEnumerable itemsSource) 
     { 
      leLookUp.ItemsSource = itemsSource; 
      object o = leLookUp.FindParentOfType<GridControl>(); 
      // o is null 
      // how could i access PART_GridControl ??? 
     } 

答えて

1

あなただけGetGridControl機能を使用することができるはずです。

DevExpress GetGridControl Link

そうでない場合は(理想的には上記の作品)あなたは以下を使用することができますが、私は両親などそれではあなただけ行くことができる

 private static DependencyObject FindParent(this DependencyObject obj, Predicate<DependencyObject> where) 
     { 
      var parent = VisualTreeHelper.GetParent(obj); 

      if (parent == null || where(parent)) 
      { 
       return parent; 
      } 

      return parent.FindParent(where); 
     } 

     public static T FindParentOfType<T>(this DependencyObject obj) where T : DependencyObject 
     { 
      return (T) FindParent(obj, x => x is T); 
     } 

を見つける必要があるいくつかの場所のためにこれを使用します。

var grid = mylookupedit1.FindParentOfType<GridControl>(); 

EDIT:

私が誤解したようここでの質問は子供を得るための他のアプローチです。

私は以前これを行うためにさまざまな方法を試してきましたが、何も働かなかった、私はすべての子供などを通過しようとしましたが、誰も実際にGridControlを持っていません。それでは、私たちがやった以下の通りです:あなたのGRIDCONTROLの宣言で

、Loadedイベント追加:グリッドを格納する変数を作成し、背後にあるコードの中で次に

<dxg:GridControl Name="PART_GridControl" Loaded="LoadedEvent"> 

を:

private GridControl theGridInTheControlTemplate; 

そして、あなたはLoadedEventハンドラを実装することができます

private void LoadedEvent(object sender, RoutedEventArgs e) 
{ 
    theGridInTheControlTemplate = (GridControl)sender; 
} 

ので、今あなたが使用することができますあなたのコードのtheGridInTheControlTemplate。

私はそれがあまりにもきれいに見えないと知っていますが、これが動作することがわかったのはこれが唯一の方法です。

・ホープ、このことができます、ここで リチャード

+0

これが私の答えではありません。私の条件では、mylookupedit1はGridControlの内部ではなく、mylookupedit1の中にGridControlがあるので、.FindChildOfTypeのようなものが必要になるかもしれません。

+0

サンプルコードを追加しました。役立つかもしれません。 –

+0

私は最初に質問を誤解したので、上記の編集を行った。お役に立てれば。 – Richard

1

は、より良い方法です。

void edt_PopupOpened(object sender, RoutedEventArgs e) 
    { 
     LookUpEdit edt = (LookUpEdit)sender; 

     Dispatcher.BeginInvoke((Action)(() => 
     { 
      GridControl t = edt.GetGridControl(); 
      // do something with a column... t.Columns["RecId"].Visible = false; 
     }), DispatcherPriority.Input); 
    } 

または

void YourGridNameifItsInGrid_ShownEditor(object sender, EditorEventArgs e) 
     { 
      if (e.Editor is LookUpEdit) 
      { 
       LookUpEdit lookupEdit = (LookUpEdit)e.Editor; 
       GridControl gGridControl = lookupEdit.GetGridControl();     
      } 
     } 
関連する問題