Dev express: Как получить доступ к контролю в табличке данных - PullRequest
0 голосов
/ 04 марта 2020

У меня есть сетка деталей в мастере. Тем не менее, внутренняя сетка была помещена в таблицу данных, поэтому я не могу получить к ней доступ в коде позади. Я хочу установить ширину столбца Innergrid в коде и скрыть первый столбец InnerGrid. Я добавлю функцию перетаскивания из трех gridcontrols (TopModelDatagrid, OptionDatagrid, InnerGridcontrol) в новый gridcontrol позже. Следовательно, мне нужен доступ к нему из кода. Может кто-нибудь предложить мне, как получить к нему доступ в коде?

Скриншот подробностей Mater

MainWindow.xaml

<dx:ThemedWindow 
    x:Class="MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:dx="http://schemas.devexpress.com/winfx/2008/xaml/core"
    xmlns:dxg="http://schemas.devexpress.com/winfx/2008/xaml/grid"
    xmlns:local="clr-namespace:Master_Detail"
    Title="MainWindow" Height="800" Width="1000">
    <Grid>
        <Grid Margin="0">
            <Grid.RowDefinitions>
                <RowDefinition Height="27*"/>
                <RowDefinition Height="347*"/>
                <RowDefinition Height="22*"/>
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition/>
            </Grid.ColumnDefinitions>

            <Grid Margin="0,0,0,0" Grid.RowSpan="2">
                <Grid.RowDefinitions>
                    <RowDefinition Height="43*"/>
                    <RowDefinition Height="54*"/>
                </Grid.RowDefinitions>
                <dxg:GridControl x:Name="TopModelDatagrid" SelectionMode="Row" AutoGenerateColumns="AddNew" EnableSmartColumnsGeneration="True"  Margin="0,0,0,0" >
                    <dxg:GridControl.View>
                        <dxg:TableView x:Name="TopModelTableView" AutoWidth="True"/>
                    </dxg:GridControl.View>
                </dxg:GridControl>

                <dxg:GridControl  x:Name="OptionDatagrid"  SelectionMode="Row" AutoGenerateColumns="AddNew" EnableSmartColumnsGeneration="True" Margin="0,0,0,0" Grid.Row="1">
                    <dxg:GridControl.View>
                        <dxg:TableView
                            x:Name="OptionTableView"
                            AllowMasterDetail="True"
                            AutoWidth="True"
                            IsDetailButtonVisibleBinding="{Binding Row.Opt, Converter={local:IsTopModelConverter}}"/>
                    </dxg:GridControl.View>
                    <dxg:GridControl.DetailDescriptor>
                        <dxg:ContentDetailDescriptor>
                            <dxg:ContentDetailDescriptor.ContentTemplate>
                                <DataTemplate>
                                    <dxg:GridControl AutoGenerateColumns="AddNew" x:Name="InnerGrid" MaxHeight="1000"
                                                     ItemsSource="{Binding MasterRowData.View.Grid.ItemsSource, RelativeSource={RelativeSource TemplatedParent}}"
                                                     FixedFilter="{Binding Opt, Converter={local:FilterConverter}}">
                                        <dxg:GridControl.View>
                                            <dxg:TableView x:Name="InnerGridTableView" ShowGroupPanel="False" AutoWidth="True"/>
                                        </dxg:GridControl.View>
                                    </dxg:GridControl>
                                </DataTemplate>
                            </dxg:ContentDetailDescriptor.ContentTemplate>
                        </dxg:ContentDetailDescriptor>
                    </dxg:GridControl.DetailDescriptor>
                </dxg:GridControl>
            </Grid>
        </Grid>
    </Grid>
</dx:ThemedWindow>

MainWindow.xaml.vb

Imports System.Text
Imports DevExpress.Xpf.Core
Imports System.Collections
Imports System.Collections.Generic
Imports System.Collections.ObjectModel
Imports System
Imports System.IO
Imports Microsoft.Win32
Imports System.Windows
Imports System.ComponentModel
Imports DevExpress.Xpf.Grid
Imports System.Windows.Markup
Imports System.Globalization
Imports DevExpress.Data.Filtering

''' <summary>
''' Interaction logic for MainWindow.xaml
''' </summary>
Partial Public Class MainWindow
    Inherits ThemedWindow

    '-------------------Define Product Class--------------------------
    Public Class Product
        Public Property Partnumber As String
        Public Property Opt As String
        Public Property Description As String
        Public Property USD As String

        Public Sub New(PN As String, OP As String, Desc As String, UD As String)

            Partnumber = PN
            Opt = OP
            Description = Desc
            USD = UD
        End Sub

    End Class


    Public Sub New()
        InitializeComponent()

        LoadBound(System.Environment.CurrentDirectory & "\SourceData.txt")
        TopModelDatagrid.ItemsSource = TopProducts
        OptionDatagrid.ItemsSource = OptionProducts
        'InnerGrid.ItemsSource = OptionProducts
        TopModelDatagrid.CurrentItem = TopModelDatagridRowNumber
        OptionDatagrid.Columns(0).AutoFilterValue = TopModelDatagrid.GetCellValue(0, "Partnumber")
        'InnerGrid.Columns(0).AutoFilterValue = OptionDatagrid.GetFocusedRowCellValue("Opt")
        OptionDatagrid.Columns(0).Visible = False
        'InnerGrid.Columns(0).Visible = False

        TopModelDatagrid.Columns(1).Visible = False

    End Sub

    Dim TopProducts As ObservableCollection(Of Product)
    Dim OptionProducts As ObservableCollection(Of Product)
    Dim TopModelDatagridRowNumber As Integer = 0
    Dim OptionDatagridRowNumber As Integer = 0
    Property DatagridFocus As ObservableCollection(Of Boolean) = New ObservableCollection(Of Boolean)

    Private Sub LoadBound(ByVal fName As String)
        'Build a List(Of Product) from the text file
        Dim lstProducts As New List(Of Product)
        Dim lst2Products As New List(Of Product)
        Dim lines = File.ReadAllLines(fName, System.Text.Encoding.Default)
        Dim templine As String
        Dim i As Integer = 0
        For Each line In lines
            i = i + 1
            templine = line

            Dim Props() As String
            Props = templine.Split(CChar(vbTab))

            If Props(0) = Props(1) Then

                Dim p As New Product(Props(0), Props(1), Props(2), Props(3))
                lstProducts.Add(p)
            Else
                Dim p As New Product(Props(0), Props(1), Props(2), Props(3))
                lst2Products.Add(p)
            End If
        Next
        'The constructor of an ObservableCollection can take a List(Of T)
        TopProducts = New ObservableCollection(Of Product)(lstProducts)
        OptionProducts = New ObservableCollection(Of Product)(lst2Products)
    End Sub

    Private Sub TopModelDatagrid_CurrentItemChanged(sender As Object, e As CurrentItemChangedEventArgs) Handles TopModelDatagrid.CurrentItemChanged
        Try
            OptionDatagrid.Columns(0).AutoFilterValue = TopModelDatagrid.GetFocusedRowCellValue("Partnumber")
        Catch ex As Exception
        End Try
    End Sub

    Private Sub OptionDatagrid_CurrentItemChanged(sender As Object, e As CurrentItemChangedEventArgs) Handles OptionDatagrid.CurrentItemChanged
        Try
            'InnerGrid.Columns(0).AutoFilterValue = OptionDatagrid.GetFocusedRowCellValue("Opt")
        Catch ex As Exception
        End Try
    End Sub
End Class

Public Class IsTopModelConverter
    Inherits MarkupExtension
    Implements IValueConverter
    Public Overrides Function ProvideValue(serviceProvider As IServiceProvider) As Object
        Return Me
    End Function

    Public Function Convert(value As Object, targetType As Type, parameter As Object, culture As CultureInfo) As Object Implements IValueConverter.Convert
        Return value.ToString().StartsWith("Topmodel")
    End Function

    Public Function ConvertBack(value As Object, targetType As Type, parameter As Object, culture As CultureInfo) As Object Implements IValueConverter.ConvertBack
        Throw New NotImplementedException()
    End Function
End Class

Public Class FilterConverter
    Inherits MarkupExtension
    Implements IValueConverter
    Public Overrides Function ProvideValue(serviceProvider As IServiceProvider) As Object
        Return Me
    End Function

    Public Function Convert(value As Object, targetType As Type, parameter As Object, culture As CultureInfo) As Object Implements IValueConverter.Convert
        Return New BinaryOperator("Partnumber", value)
    End Function

    Public Function ConvertBack(value As Object, targetType As Type, parameter As Object, culture As CultureInfo) As Object Implements IValueConverter.ConvertBack
        Throw New NotImplementedException()
    End Function
End Class
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...