WPF DataGrid не может добавить строку, когда источник данных пуст - PullRequest
8 голосов
/ 16 января 2010

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

Заранее спасибо, Trindaz

Ответы [ 2 ]

2 голосов
/ 16 января 2010

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

Сначала я определил 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>();

надеюсь, это поможет, с уважением

1 голос
/ 27 ноября 2010

Добавьте пустой элемент в ваш ItemsSource, а затем удалите его. Возможно, вам придется установить CanUserAddRows обратно в true после этого. Я читаю это решение здесь : (сообщения Джарри и Рика Роена)

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

...