【问题标题】:datagrid height issue in nested datagrid( when using three data grid)嵌套数据网格中的数据网格高度问题(使用三个数据网格时)
【发布时间】:2010-05-22 04:02:29
【问题描述】:

我有一个嵌套的数据网格(它是三个数据网格)。在这里我可以毫无问题地显示数据。

第一个数据网格有 5 行 这里的主要问题是当您单击第一个数据网格中的任何行时,我会显示 2 个数据网格(有 10 行)

假设我单击 2 个数据网格中的 3 行。它在第三个数据网格中显示更多记录。 当我再次单击 2 个数据网格中的 5 行时,它会在第三个数据网格中显示更多记录。 现在所有记录都显示正常

当您尝试折叠 2 个数据网格中的第 3 行时,它会折叠,但问题是第三个数据网格占用空间来显示记录的高度(我们可以看到主 2 个数据网格之间显示一个空白区域和第三个数据网格)

在每个网格的第一列中,我都有一个按钮,我正在编写此代码以进行展开和折叠

这是我在我展开 collpase 的所有数据网格按钮中实现的功能。

希望我的问题很清楚 .任何帮助都会很棒

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)
            {
            }
        }

【问题讨论】:

  • 你能发布(缩写)xaml 吗?我无法显示您的布局
  • 感谢重播我更新了我的 xaml 代码。这样问题就清楚了

标签: silverlight silverlight-4.0


【解决方案1】:

【讨论】:

    【解决方案2】:

    这显然是 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();
    }
    

    当父行重新打开时,仍然选择了二级网格中的正确行,因此在视觉上这创造了相当无缝的体验。

    【讨论】:

      猜你喜欢
      • 2011-11-18
      • 2015-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-19
      • 2010-10-06
      • 1970-01-01
      相关资源
      最近更新 更多