Как получить экземпляр GridControl в LookupEdit (Devexpress) - PullRequest
2 голосов
/ 07 июля 2011

Не так много, чтобы сказать, просто хочу экземпляр DXGrid, где у меня есть LookUpEdit. Я использую WPF.

mylookupedit1.GridControl <- ??? </p>

отредактировано:

Вот пример кода:

 <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 ]

1 голос
/ 10 декабря 2014

Вот лучшие способы.

    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();                  
            }
        }
1 голос
/ 07 июля 2011

Вы должны иметь возможность просто использовать функцию 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 в своем коде.

Я знаю, что это не кажется слишком чистым, но это единственный способ, которым я нашел, что это работает.

Надеюсь, это поможет, Ричард

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...