Модераторы: gambit, Kefir, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Доступ к объектам в RowDetailsTemplate 
:(
    Опции темы
Voucik
Дата 7.5.2013, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 7.5.2013

Репутация: нет
Всего: нет



Здравствуйте. Как получить доступ к вложенной таблице в RowDetailsTemplate (т.е. таблица в таблице).
Код XAML
Код

<Grid>
                <DataGrid 
                Name="GvHeader"                     
                AutoGenerateColumns="False"                                                 
                HorizontalScrollBarVisibility="Auto"
                CanUserDeleteRows="False"  
                CanUserAddRows="False"            
                CanUserResizeColumns="True"
                CanUserReorderColumns="False"
                CanUserResizeRows="False"
                AllowDrop="False"
                RowDetailsVisibilityMode="Collapsed"
                IsReadOnly="True" ClipboardCopyMode="ExcludeHeader" SelectionMode="Single" SelectionChanged="GvHeader_SelectionChanged">
                            <DataGrid.RowStyle>
                                <St yle TargetType="{x:Type DataGridRow}">
                                    <EventSetter Event="MouseDoubleClick" Handler="HeaderRowDoubleClick"/>
                                    <EventSetter Event="Unselected" Handler="HeaderRowUnselected"></EventSetter>
                                </Style>
                            </DataGrid.RowStyle>
                        <DataGrid.RowDetailsTemplate>
                            <DataTemplate>
                                <DataGrid x:Name="GvLines"                    
                                    AutoGenerateColumns="False"                                                 
                                    HorizontalScrollBarVisibility="Auto"
                                    CanUserDeleteRows="False"  
                                    CanUserAddRows="False"            
                                    CanUserResizeColumns="True"
                                    CanUserReorderColumns="False"
                                    CanUserResizeRows="False"
                                    AllowDrop="False"            
                                    IsReadOnly="True" ClipboardCopyMode="ExcludeHeader" SelectionMode="Single" ItemsSource="{Binding Path=Lines}"
                                    SelectionChanged="GvLines_SelectionChanged" MouseDoubleClick="GvLines_OnMouseDoubleClick">
                                    <DataGrid.Columns>
                                        <DataGridTemplateColumn x:Name="ShowLineStatus"                                           
                                           CanUserSort="False"                                           
                                           IsReadOnly="True"                                                                                                                                                         
                                           Width="22">

                                            <DataGridTemplateColumn.CellTemplate>
                                                <DataTemplate>
                                                    <Image Width="20" Name="pop" Height="20" ToolTip="Восстановить" Source="/Management;component/Images/key_enter.png">
                                                    </Image>
                                                    <DataTemplate.Triggers>
                                                        <DataTrigger Binding="{Binding CancelSatatus}" Value="False">
                                                            <Setter TargetName="pop"  Property="Source" Value="/Management;component/Images/cancel.png"/>
                                                            <Setter TargetName="pop" Property="ToolTip" Value="Отменить"/>
                                                        </DataTrigger>
                                                    </DataTemplate.Triggers>
                                                </DataTemplate>
                                            </DataGridTemplateColumn.CellTemplate>
                                        </DataGridTemplateColumn>

                                        <DataGridTextColumn
                                            x:Name="ColumnNumber"
                                            Header="oooo1"
                                            MinWidth="50" Width="Auto"                                            
                                            Binding="{Binding Path=line1,Mode=OneWay}"/>
                                        
                                        <DataGridTextColumn
                                            Header="ooo2"                                                                                  
                                            MinWidth="20" Width="Auto" 
                                            CellSt yle="{StaticResource CellStyleCenter}"
                                            Binding="{Binding Path=line2,Mode=OneWay}"/>
                                        <DataGridTextColumn
                                            Header="00003"
                                            MinWidth="50" Width="Auto"                                            
                                            Binding="{Binding Path=line3,Mode=OneWay}"/>
                                    </DataGrid.Columns>
                                </DataGrid>
                            </DataTemplate>
                    </DataGrid.RowDetailsTemplate>
                    <DataGrid.Columns>
                        <DataGridTextColumn
                                        x:Name="Number"
                                        Header="Номер"
                                        MinWidth="50" Width="Auto"                                            
                                        Binding="{Binding Path=head1,Mode=OneWay}"/>
                        <DataGridTextColumn
                                        Header="Sss"                                                                                  
                                        MinWidth="20" Width="Auto" 
                                        CellSt yle="{StaticResource CellStyleCenter}"
                                        Binding="{Binding Path=head2,Mode=OneWay}"/>
                        </DataGrid.Columns>
                </DataGrid>
            </Grid>


код С# (тестовые данные которые биндятся с главной таблицей по Header-у, а дочерняя таблица биндится с Lines)
Код

var line1 = new List<ILine>
                {
                    new Line("head11","h1line11", "h1line12", "h1line13", "h1line14"),
                    new Line("head11","h1line21", "h1line22", "h1line23", "h1line24"),
                    new Line("head11","h1line31", "h1line32", "h1line33", "h1line34"),
                    new Line("head11","h1line41", "h1line42", "h1line43", "h1line44")
                };

            var line2 = new List<ILine>
                {
                    new Line("head21","h2line11", "h2line12", "h2line13", "h2line14"),
                    new Line("head21","h2line21", "h2line22", "h2line23", "h2line24"),
                    new Line("head21","h2line31", "h2line32", "h2line33", "h2line34")
                };
            var header = new List<Header>
                {
                    new Header("head11", "head12", "head13", "head14"),
                    new Header("head21", "head22", "head23", "head24")
                };

            
            header[0].SetLines(line1);
            header[1].SetLines(line2);

            Global_H_items.AddRange(header);

GvHeader.ItemsSource = null;
GvHeader.ItemsSource = Global_H_items;


Подскажите пожалуйста, как получить доступ к таблице GvLines. Просто по имени к ней обратиться не могу, как к таблице GvHeader (например GvHeader.ItemsSource).
Получить данные из неё я могу, подписавшись на событие GvLines_SelectionChanged
Код

private void GvLines_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            var GvLines = (DataGrid)sender;
            var temp = (ILine)GvLines.SelectedItem;
            TbInfo.Text = temp.line4;
        }


Но вот обратиться на прямую к ней не знаю как. Например мне надо выделить определённую строку, ну типо как в примере ниже.
public void IsBlock(bool value, IHeader sel_header, ILine sel_line)//функция блокирует/разблокирует вьюшку при каких-либо операциях
        {
            if (!this.Dispatcher.CheckAccess())
            {
                this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action<Boolean, IHeader, ILine>(IsBlock), value, sel_header);
                return;
            }

            GridMain.IsEnabled = value;

            if (sel_header != null)
            {
                GvHeader.ScrollIntoView(sel_header);
                GvHeader.SelectedItem = sel_header;
                
            }

            if (sel_line != null)
            {
                var row = (DataGridRow)GvHeader.ItemContainerGenerator.ContainerFromIndex(GvHeader.SelectedIndex);
                row.DetailsVisibility = Visibility.Visible;
                //вот тут то и проблема, надо как-то получить dgLines, а как не знаю
                if (dgLines != null)
                {
                    dgLines.ScrollIntoView(sel_line);
                    dgLines.SelectedItem = sel_line;
                }
            }
        }

PM MAIL   Вверх
wolk
Дата 7.5.2013, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 18.3.2007

Репутация: нет
Всего: нет



PM MAIL   Вверх
Voucik
Дата 7.5.2013, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 7.5.2013

Репутация: нет
Всего: нет



Цитата(wolk @ 7.5.2013,  15:05)
Попробуй через FindName.

http://msdn.microsoft.com/en-us/library/sy...e(v=vs.95).aspx

Через FindName я нахожу, например выделенную колонку в той таблице, как в коде ниже
Код

private void GvLines_OnMouseDoubleClick(object sender, MouseButtonEventArgs e)
{
    var gvLine = (DataGrid) sender;
    var column = gvLine.CurrentColumn;
    var showLineStatusColumn = gvLine.FindName("ShowLineStatus") as DataGridColumn;
    if (showLineStatusColumn != null)
    {
        if (Equals(showLineStatusColumn, column))
        {
            //код обработки
        }
    }
}


Но саму таблицу не могу найти. Я писал так 
var dgLines = (DataGrid)GvHeader.RowDetailsTemplate.FindName("GvLines", GvHeader);
FindName(искомое имя,  и тут требует FrameworkElemetn (т.е. родительский элемент))
ну я и указал родителя, главную таблицу. и он мне выдаёт ошибку 
This operation is valid only on elements that have this template applied.
И я не знаю тогда, что там я должен указать.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | WPF и Silverlight | Следующая тема »


 




[ Время генерации скрипта: 0.0453 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.