Проблема высоты сетки данных во вложенной сетке данных (при использовании трех сеток данных) - PullRequest
1 голос
/ 22 мая 2010

у меня есть вложенная сетка данных (которая состоит из трех сеток данных). Здесь я могу показать данные без проблем.

первый массив данных имеет 5 строк основная проблема, которая возникает здесь, заключается в том, что при нажатии на любую строку в первой сетке данных я показываю 2 сетку данных (которая имеет 10 строк)

Допустим, я нажимаю 3 строки в 2 сетки данных. это показывает дальнейшие записи в третьем datagrid. снова, когда я щелкаю 5 строк в 2 сетке данных, он показывает дальнейшие записи в третьей сетке данных. теперь все рекорды отображаются нормально

когда вы пытаетесь объединить 3 строки в 2 сетке данных, это объединяет, но проблема в том, какая третья сетка данных, которая заняла место для показа записей (мы можем видеть пустое пространство между основной сеткой 2 данных и третья сетка данных)

в каждом столбце сетки у меня есть кнопка, где я пишу этот код для раскрытия и слияния

это функциональность, которую я реализую во всех кнопках сетки данных, где я расширяю коллапс.

надеюсь, мой вопрос ясен , любая помощь будет велика

Страница xaml

 <sdk:DataGrid MinHeight="100" x:Name="dgStudent "  Width="300" SelectionMode="Extended"   RowDetailsVisibilityMode="VisibleWhenSelected" >
             <sdk:DataGrid.Columns >
                <sdk:DataGridTemplateColumn >
                    <sdk:DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <Button x:Name="btn"   
                            Click="btn1_Click"  >
                            </Button>
                        </DataTemplate>
                    </sdk:DataGridTemplateColumn.CellTemplate>
                </sdk:DataGridTemplateColumn>

                <sdk:DataGridTemplateColumn  Header="ID"  Width="100" >
                    <sdk:DataGridTemplateColumn.CellTemplate >
                        <DataTemplate >
                            <sdk:Label Content="{Binding ID}" />
                        </DataTemplate>
                    </sdk:DataGridTemplateColumn.CellTemplate>
                </sdk:DataGridTemplateColumn>
                <sdk:DataGridTemplateColumn  Header="Name"  Width="100" >
                    <sdk:DataGridTemplateColumn.CellTemplate>
                        <DataTemplate >
                                <sdk:Label Content="{Binding Name}"  />
                        </DataTemplate>
                    </sdk:DataGridTemplateColumn.CellTemplate>
                </sdk:DataGridTemplateColumn>
            </sdk:DataGrid.Columns>
 <sdk:DataGrid.RowDetailsTemplate>
                <DataTemplate>
                    <StackPanel  x:Name="spCollege"   Width="300">
                        <sdk:DataGrid x:Name="dgCollege" Width="290" SelectionMode="Extended"   RowDetailsVisibilityMode="VisibleWhenSelected"  HeadersVisibility ="None" >
                            <sdk:DataGrid.Columns>
                                <sdk:DataGridTemplateColumn >
                                    <sdk:DataGridTemplateColumn.CellTemplate >
                                        <DataTemplate>                                     
                                            <Button x:Name="btn2"   
                            Click="btn3_Click">              
                                            </Button>

                                        </DataTemplate>
                                    </sdk:DataGridTemplateColumn.CellTemplate>
                                </sdk:DataGridTemplateColumn>
                                <sdk:DataGridTemplateColumn  Header="College"   Text="{Binding College}" >                                                         
                                <sdk:DataGridTemplateColumn  Header="Subjects"  Text="{Binding Subjects}" >                           
                            </sdk:DataGrid.Columns>
<sdk:DataGrid.RowDetailsTemplate>
                                <DataTemplate>
                                    <StackPanel x:Name="spSchool" Width="300"  >
                                        <sdk:DataGrid x:Name="dgSchool"   Width="280"   SelectionMode="Extended"   RowDetailsVisibilityMode="VisibleWhenSelected"  HeadersVisibility ="None">
                                            <sdk:DataGrid.Columns>
                                                <sdk:DataGridTemplateColumn  Width="24">
                                                    <sdk:DataGridTemplateColumn.CellTemplate>
                                                        <DataTemplate>

                                                            <Button x:Name="btn"  Height="15"  
                            Click="btn3_Click">

                                                            </Button>

                                                        </DataTemplate>
                                                    </sdk:DataGridTemplateColumn.CellTemplate>
                                                </sdk:DataGridTemplateColumn>

                <sdk:DataGridTemplateColumn  Header="School"   Text="{Binding School}" >                                                         
                                <sdk:DataGridTemplateColumn  Header="Subjects"  Text="{Binding Subjects}" >   
                                            </sdk:DataGrid.Columns>

                                        </sdk:DataGrid>
                                    </StackPanel>
                                </DataTemplate>
                            </sdk:DataGrid.RowDetailsTemplate>
                        </sdk:DataGrid>

 private void btn1_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                Button btnExpandCollapse = sender as Button;
                DependencyObject dep = (DependencyObject)e.OriginalSource;
               while ((dep != null) && !(dep is DataGridRow))
                {
                    dep = VisualTreeHelper.GetParent(dep);
                }
                // if we found the clicked row 
                if (dep != null && dep is DataGridRow)
                {
                    DataGridRow row = (DataGridRow)dep;
                    // change the details visibility 
                    if (row.DetailsVisibility == Visibility.Collapsed)
                    {
                        row.DetailsVisibility = Visibility.Visible;
                    }
                    else
                    {
                        row.DetailsVisibility = Visibility.Collapsed;
                        }
                    }
                }

            catch (System.Exception)
            {
            }
        }
---------------------------------------
2 datagrid
private void btn2_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                Button btnExpandCollapse = sender as Button;
                DependencyObject dep = (DependencyObject)e.OriginalSource;
               while ((dep != null) && !(dep is DataGridRow))
                {
                    dep = VisualTreeHelper.GetParent(dep);
                }
                if (dep != null && dep is DataGridRow)
                {
                    DataGridRow row = (DataGridRow)dep;
                    // change the details visibility 
                    if (row.DetailsVisibility == Visibility.Collapsed)
                    {
                        row.DetailsVisibility = Visibility.Visible;
                    }
                    else
                    {
                        row.DetailsVisibility = Visibility.Collapsed;
                        }
                    }
                }

            catch (System.Exception)
            {
            }
        }
 -----------------
3 datagrid
private void btn1_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                Button btnExpandCollapse = sender as Button;
                DependencyObject dep = (DependencyObject)e.OriginalSource;
               while ((dep != null) && !(dep is DataGridRow))
                {
                    dep = VisualTreeHelper.GetParent(dep);
                }
                // if we found the clicked row 
                if (dep != null && dep is DataGridRow)
                {
                    DataGridRow row = (DataGridRow)dep;
                    // change the details visibility 
                    if (row.DetailsVisibility == Visibility.Collapsed)
                    {
                        row.DetailsVisibility = Visibility.Visible;
                    }
                    else
                    {
                       row.DetailsVisibility = Visibility.Collapsed;
                        }
                    }
                }

            catch (System.Exception)
            {
            }
        }

Ответы [ 2 ]

1 голос
/ 25 декабря 2011
0 голосов
/ 18 июня 2011

Это, видимо, ошибка в сетке SL. Я смог обойти это, быстро закрыв и снова открыв родительский RowDetailsTemplate после того, как пользователь свернул строку в сетке второго уровня:

void secondLevelGrid_RowDetailsVisibilityChanged(object sender, DataGridRowDetailsEventArgs e)
{
    if (e.Row.DetailsVisibility == Visibility.Visible) return;

    var parentRow = this.GetVisualAncestors().OfType<DataGridRow>().FirstOrDefault();
    parentRow.DetailsVisibility = Visibility.Collapsed;

    var timer = new DispatcherTimer() { Interval = new TimeSpan(0, 0, 0, 0, 200) };
    timer.Tick += (ts, te) =>
                      {
                          Dispatcher.BeginInvoke(() => parentRow.DetailsVisibility = Visibility.Visible);
                          timer.Stop();
                      };
    timer.Start();
}

При повторном открытии родительской строки правильная строка в сетке второго уровня все еще выбирается, поэтому визуально это создает довольно плавный опыт.

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