2011-12-30 60 views
9

Tôi đang sử dụng DataGrid để hiển thị một số trường, một trong số đó là mô tả nhiều dòng. Lưới hiển thị dữ liệu tốt cho đến khi tôi cố gắng ẩn các hàng tiêu đề bằng cách đặt HeadersVisibility="Column". Các hàng tiêu đề biến mất nhưng sau đó trong khi tôi cuộn tiêu đề hàng xuất hiện lại cho một số hàng ngẫu nhiên.Lỗi hiển thị tiêu đề hàng dữ liệu WPF DataGrid

Tôi đã thu hẹp nó xuống cột hiển thị mô tả nhiều dòng. Miễn là tôi rời khỏi cột này, sau đó tôi không có vấn đề này. Tôi đã cố gắng tách các dòng bằng cả hai "\r\n""\n" nhưng không hoạt động. DataGrid có hỗ trợ các trường văn bản nhiều dòng không?

Dưới đây là hình ảnh để hiển thị những gì đang diễn ra và XAML tôi đã sử dụng để tạo lưới.

DataGrid Row Header Error Image

<DataGrid DataContext="{StaticResource personRepository}" 
      ItemsSource="{Binding PersonList, Mode=OneWay}" 
      AutoGenerateColumns="False" 
      HeadersVisibility="Column" 
      CanUserSortColumns="False" 
      SelectionMode="Extended" 
      IsReadOnly="True"> 

    <DataGrid.Columns> 
     <DataGridTextColumn Header="Id" Width="80" Binding="{Binding Id, Mode=OneWay}" /> 
     <DataGridTextColumn Header="First Name" Width="150" Binding="{Binding FirstName, Mode=OneWay}" /> 
     <DataGridTextColumn Header="Last Name" Width="150" Binding="{Binding LastName, Mode=OneWay}" /> 
     <DataGridTextColumn Header="Description" Width="*" Binding="{Binding Description, Mode=OneWay}" /> 
    </DataGrid.Columns> 
</DataGrid> 
+0

Ý của bạn là gì? "? Tiêu đềVisibility = "Cột" là mặc định. Cài đặt trước đó (đã hoạt động) là gì? Nếu đây là chỉ đọc tôi sẽ sử dụng ListView GridView. XAML hơn nhưng tôi nghĩ bạn có thể kiểm soát tốt hơn định dạng. Đối với các nội dung sử dụng TextBlock và thiết lập Wrap on cho mô tả. – Paparazzi

+0

Giá trị mặc định là HeadersVisibility = All. Hàng tiêu đề là nhỏ, nhưng nó ở đó. Tôi bắt đầu với GridView nhưng chiều rộng cột sẽ không chấp nhận ký hiệu "*" để cột cuối cùng sẽ lấp đầy khoảng trống còn lại. – dewald

+0

Bạn phải sử dụng trình chuyển đổi cho * với GridView. Tôi sẽ đăng nó như một câu trả lời nếu bạn thích. – Paparazzi

Trả lời

16

Hãy thử thiết lập RowHeaderWidth = 0 thay vì HeaderVisibility

1

Trong trường hợp này lvCurDocFields là ListView mẹ. Phía dưới ở đây là bạn cần phải thiết lập độ rộng cứng cho các cột khác và sau đó tổng số của các cột khác là ConverterParameter. Nếu bạn có thanh cuộn dọc thì hãy để khoảng 20. GridView là loại đau nhưng tôi thích bản trình bày vì chỉ đọc nó hiệu quả hơn nhiều so với DataGrid

<GridViewColumn Width="{Binding ElementName=lvCurDocFields, Path=ActualWidth, Converter={StaticResource widthConverter}, ConverterParameter=100}"> 

[ValueConversion(typeof(double), typeof(double))] 
public class WidthConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     // value is the total width available 
     double otherWidth; 
     try 
     { 
      otherWidth = System.Convert.ToDouble(parameter); 
     } 
     catch 
     { 
      otherWidth = 100; 
     } 
     if (otherWidth < 0) otherWidth = 0; 

     double width = (double)value - otherWidth; 
     if (width < 0) width = 0; 
     return width; // columnsCount; 

    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 
Các vấn đề liên quan