2010-01-16 5 views
8

CanUserAddRows="True" только «работает», когда уже есть данные в ItemsSource из DataGrid. Если так получилось, что в исходном списке элементов нет строк, то DataGrid не отображает строку placeholder для ввода новых элементов, хотя я установил CanUserAddRows="True". Зачем?!WPF DataGrid не может добавить строку, когда источник данных пуст

Спасибо заранее, Trindaz

+0

также случается, что вы не можете прокрутить вправо, чтобы увидеть столбцы, которые находятся вне экрана, потому что у вас нет горизонтальных полос прокрутки без элементов. –

ответ

2

Это, кажется, известная проблема с WPF DataGrid. См. Обсуждение here (начиная с 4-го комментария) Также он исправляется в .net 4. Я сделал несколько тестов для этой проблемы в форматах 3.5 и 4 (beta2). Pls, увидеть результаты ниже:

Первого я определил 3 типа коллекций элементов:

public class TestGridItems0 : ArrayList 
{ 
} 

public class TestGridItems1 : List<TestGridItem> 
{ 
} 

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

где TestGridItem ниже:

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

.net 3,5

TestGridItems0 и TestGridItems1 не отображалась пустая строка для пустой коллекции; где TestGridItems2 отлично работает.

.net 4

только TestGridItems0 не показывать линию для пустого набора; другие 2 работали нормально.

XAML для сетки:

<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> 

ниже, как был назначен источник пунктов:

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

надеюсь, что это помогает, считает

+0

Простое преобразование '.ToList()' разрешило проблему. Спасибо за подсказку. –

1

Добавить пустой элемент в вашей ItemsSource, а затем удалить Это. После этого вам может потребоваться вернуть CanUserAddRows в true. Я прочитал это решение here: (Сообщения от Jarrey и Rick Roen)

У меня была эта проблема, когда я устанавливал ItemsSource в DataView для DataTable и вид был пуст. Столбцы были определены, хотя поэтому они должны были их получить. Хех.