2011-11-24 38 views
6

Tôi có một DataGrid được liên kết với một số DataTable. Tôi muốn DataGrid luôn có ít nhất mười hàng trống (cũng trống), nếu không có đủ dữ liệu thực (dữ liệu sẽ xuất hiện từng chút một).
ExampleĐiền vào DataGrid với các hàng trống

Một cách tiếp cận sẽ dễ dàng thêm mười hàng trống vào DataTable khi khởi tạo. Nhưng khi một mục dữ liệu thực xuất hiện, tôi không thể dễ dàng thêm hàng, tôi phải tìm hàng trống đầu tiên để ghi đè lên nó, cái gì không phải là rất tiện dụng.
Vì vậy, ai đó biết cách thông minh hơn/tích hợp để đạt được điều này?

+0

Làm thế nào về việc thêm các mục trống vào bộ sưu tập của bạn nếu 'Đếm' của bộ sưu tập nhỏ hơn 10? –

+0

Đó là những gì tôi đã nói, tôi luôn phải kiểm tra xem có bao nhiêu hàng thực, và thêm hoặc xóa các hàng trống. Tôi hy vọng sẽ có một cách tiếp cận thông minh hơn hoặc được xây dựng trong. – SpeziFish

+0

Tại sao bạn cần xóa hàng? Ngoài ra bạn không cần phải ghi đè lên những cái hiện có, chỉ cần rebind toàn bộ bộ sưu tập nếu thời gian tiếp theo lớn hơn 10. –

Trả lời

0

Sẽ rất lộn xộn, bất kể từ phía nào nó được tiếp cận. Tôi muốn nói đặt cược tốt nhất của bạn (miễn là nội dung ô lưới của bạn sẽ không được bao bọc) là sử dụng một cọ vẽ trực quan (với các dòng) làm nền của DataGrid của bạn.

CẬP NHẬT 1 - XAML Thật tuyệt vời ở đó, mẹo là sử dụng MinHeight, điều này sẽ tạo ra tầm nhìn về các vật phẩm trống nhờ nền lát. Nếu lưới của bạn sẽ được điền bằng dữ liệu thực mà nền sẽ mở rộng, hiển thị nhiều dòng hơn.

Một điều tôi đã không thử là cách nó sẽ xử lý cuộn.

Dưới đây là một ví dụ:

<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 Phương pháp tiếp cận tốt đẹp, nhưng trông rất giả mạo so với dữ liệu thực tế . Ngoài ra các dòng cột bị thiếu. – SpeziFish

+0

@SpeziFish Cheers, đó là một cách nhanh chóng để làm mọi việc. –

0

nếu nó chỉ cho bố trí, bạn chỉ có thể thêm một DataGrid thứ hai với 10 dòng sản phẩm nào dưới DataGrid thực sự của bạn. hoặc bạn lấy aproach Dmitry được đăng và sử dụng cọ vẽ trực quan

+0

+1 Ý tưởng hay, nhưng quá nhiều chi phí, tôi nghĩ rằng – SpeziFish

+0

nhưng bạn không phải thao tác dữ liệu thực của bạn và tất cả có thể được thực hiện trong xaml;) – blindmeis

Các vấn đề liên quan