如何在lookpedit (Devexpress)中获得GridControl的实例

本文关键字:GridControl 实例 lookpedit Devexpress | 更新日期: 2023-09-27 18:01:33

不多说,只是想要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 ???
        }

如何在lookpedit (Devexpress)中获得GridControl的实例

你应该可以直接使用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。

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

希望这有帮助,理查德。

有更好的方法。

    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();                  
            }
        }