如何在LookupEdit(Devexpress)中获取GridControl的实例

时间:2011-07-07 14:41:39

标签: c# wpf devexpress

不是很多,只想要DXGrid的实例,我有一个LookUpEdit。 我正在使用WPF。

mylookupedit1.GridControl< - ???

已编辑:

以下是一些示例代码:

 <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 ???
        }

2 个答案:

答案 0 :(得分: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>();

编辑:

我误解了这里的问题是另一种让孩子接受的方法。

我以前曾尝试过很多不同的方法来做到这一点,但是没有办法,我已经尝试过所有的孩子等等。但实际上没有人得到GridControl。所以我们做的是以下几点:

在GridControl的声明中,添加一个Loaded事件:

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

然后在你的代码中,创建一个变量来存储网格:

private GridControl theGridInTheControlTemplate;

然后你可以实现LoadedEvent处理程序:

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

现在您可以在代码中使用GridInTheControlTemplate。

我知道它看起来不太干净,但这是我发现这个工作的唯一方法。

希望这有帮助, 理查德

答案 1 :(得分: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();                  
            }
        }