2011-11-24 110 views
6

我有一个DataGrid绑定到DataTable。我希望DataGrid总是有至少十(空)行,如果没有足够的真实数据项(数据一点一点地出现)。
Example用空行填充DataGrid

一种方法是在初始化时轻松地将10个空行添加到DataTable。但是当一个真正的数据项出现时,我不能轻松添加该行,我必须找到第一个空行来覆盖它,这是不太方便的。
那么有人知道一个更聪明/内置的方式来实现这一目标?

+0

如果收集的'计数'小于10,只需将空项添加到您的收藏如何? –

+0

这就是我所说的,我总是必须检查有多少实际行,并添加或删除空行。我希望会有更聪明的或内置的方法。 – SpeziFish

+0

为什么你需要删除行?你也不需要覆盖现有的,只是在下次计数大于10时重新绑定整个集合。 –

回答

0

不管从哪边接近,它都会变得混乱。我会说你最好的选择(假设你的网格单元格内容不会被包装)是使用一个可视化画笔(带有线条)作为你的DataGrid的背景。

更新1 - XAML 它在那里,它的诀窍是使用MinHeight,由于平铺背景会产生空白项目的愿景。如果您的网格将填充真实数据,背景将会展开,呈现更多线条。

我没有尝试的一件事是它将如何处理滚动。

下面是一个例子:

<Grid> 
    <Grid.Resources> 
     <VisualBrush x:Key="StripesBrush" TileMode="Tile" Viewport="0,0,5,20" 
       Viewbox="0,0,10,10" ViewportUnits="Absolute" 
       ViewboxUnits="Absolute"> 
      <VisualBrush.Visual> 
       <Line X1="0" X2="10000" Y1="0" Y2="0" Stroke="DarkGray"/> 
      </VisualBrush.Visual> 
     </VisualBrush> 
    </Grid.Resources> 
    <DataGrid x:Name="g" AutoGenerateColumns="False" 
       GridLinesVisibility="None" 
       MinHeight="100" 
       Height="100" 
       VerticalAlignment="Top" 
       Background="{StaticResource StripesBrush}"> 

     <DataGrid.Columns> 
      <DataGridTextColumn Header="A" Width="Auto" Binding="{Binding Item1}"> 
       <DataGridTextColumn.CellStyle> 
        <Style TargetType="DataGridCell"> 
         <Setter Property="Background" Value="Transparent"></Setter> 
        </Style> 
       </DataGridTextColumn.CellStyle> 
      </DataGridTextColumn> 
      <DataGridTextColumn Header="B" Width="Auto" Binding="{Binding Item2}" /> 
     </DataGrid.Columns> 
    </DataGrid> 
</Grid> 

+0

+1好方法,但看起来很虚假与真正的数据网格相比。此外,列线缺失。 – SpeziFish

+0

@SpeziFish干杯,这是一个快速肮脏的方式来完成任务。 – 2011-11-24 15:18:13

0

如果只是布局,你可以简单地添加有10个空行的第二个DataGrid下你的真实数据网格。或者你采取的措施德米特里发布和使用视觉刷

+0

+1好主意,但是开销太多,我想 – SpeziFish

+0

但是你不必操纵你的真实数据,所有的都可以在xaml中完成;) – blindmeis