2010-01-16 885 views
8

CanUserAddRows="True" chỉ 'hoạt động' khi đã có dữ liệu trong ItemsSource của DataGrid. Nếu điều đó xảy ra không có hàng trong danh sách các mục gốc, thì DataGrid không hiển thị hàng placeholder để nhập mục mới, mặc dù tôi đã đặt CanUserAddRows="True". Tại sao?!WPF DataGrid không thể Thêm hàng khi nguồn dữ liệu trống

Cảm ơn trước, Trindaz

+0

cũng điều xảy ra là bạn không thể cuộn sang phải để xem các cột bị tắt màn hình, vì bạn không có thanh cuộn ngang mà không có mục nào. –

Trả lời

2

này dường như là một vấn đề được biết đến với WPF DataGrid. Xem thảo luận here (bắt đầu từ bình luận thứ 4) Cũng có vẻ như nó đã được sửa trong .net 4. Tôi đã thực hiện một số kiểm tra cho vấn đề này trên các khung công tác 3.5 và 4 (beta2). Xin vui lòng, xem kết quả dưới đây:

Trước tiên tôi định nghĩa 3 loại bộ sưu tập item:

public class TestGridItems0 : ArrayList 
{ 
} 

public class TestGridItems1 : List<TestGridItem> 
{ 
} 

public class TestGridItems2<T> : List<TestGridItem> 
{ 
} 

nơi TestGridItem là dưới đây:

public class TestGridItem 
{ 
    public string One { get; set; } 
    public string Two { get; set; } 
    public string Three { get; set; } 
} 

.net 3,5

TestGridItems0 và TestGridItems1 không hiển thị một dòng trống cho một bộ sưu tập trống; nơi như TestGridItems2 đã làm việc tốt.

.net 4

chỉ TestGridItems0 không hiển thị dòng cho bộ sưu tập trống rỗng; khác 2 làm việc tốt.

XAML cho lưới điện:

<my:DataGrid Name="dataGrid" AutoGenerateColumns="False" CanUserAddRows="True"> 
    <my:DataGrid.Columns> 
     <my:DataGridTextColumn Binding="{Binding One}" Header="One" /> 
     <my:DataGridTextColumn Binding="{Binding Two}" Header="Two" /> 
     <my:DataGridTextColumn Binding="{Binding Three}" Header="Three" /> 
    </my:DataGrid.Columns> 
</my:DataGrid> 

dưới đây là cách nguồn mặt hàng được giao nhiệm vụ:

dataGrid.ItemsSource = new TestGridItems0(); 
dataGrid.ItemsSource = new TestGridItems1(); 
dataGrid.ItemsSource = new TestGridItems2<TestGridItem>(); 

hy vọng điều này giúp, coi

+0

Một chuyển đổi '.ToList()' đơn giản đã giải quyết được vấn đề. Cảm ơn bạn đã gợi ý. –

1

Thêm một mục trống để ItemsSource của bạn và sau đó loại bỏ nó. Bạn có thể phải đặt CanUserAddRows trở lại true sau khi thực hiện điều này. Tôi đọc giải pháp này here: (Bài đăng của Jarrey và Rick Roen)

Tôi gặp sự cố này khi tôi đặt ItemsSource thành DefaultView của DataTable và chế độ xem trống. Các cột được xác định mặc dù vậy nên nó đã có thể có được chúng. Heh.