2011-11-24 111 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