суббота, 6 июня 2009 г.

Простое добавление строк в DataGrid из WPF Toolkit

Есть такой замечательный контрол для WPF – DataGrid. Он входит в состав WPF Toolkit. Но просто добавить строки в эту таблицу, как, например, в аналогичный контрол из Windows Forms 2.0, не получится. Надо действовать так: DataGrid нужно связать её с какой-нибудь коллекцией. Изменится коллекция - изменятся и строки в DataGrid.
Создаём класс с полями, аналогичными столбцам в таблице:
public class Person{
    public string Name { get; set; }
    public string EMail { get; set; }
}
Объявляем коллекцию:
ObservableCollection<Person> coll = new ObservableCollection<Person>();
И добавляем элементы в коллекцию вот так:

coll.Add(
new Person() { Name = "Frank Grimmes", EMail = "mail@mail.mail" });
И привязываем коллекция к DataGrid:

dataGrid.ItemsSource = coll;
dataGrid.Items.Refresh();
После какого-либо изменения коллекции надо обновить "элементы" таблицы:

dataGrid.Items.Refresh();
И напоследок: в XAML создавать колонки надо так:
<my:DataGrid.Columns>
    <
my:DataGridTextColumn Header="Имя" Binding="{Binding Path=Name}" />
    <
my:DataGridHyperlinkColumn Header="Электронная почта" Binding="{Binding Path=EMail}" />
</
my:DataGrid.Columns>
P.S. : а ещё можно заставить класс Person наследовать интерфейс INotifyPropertyChange. Тогда не нужно будет обновлять таблицу каждый раз после изменения. Это будет делаться автоматически. Подробнее здесь. Вот и всё.

8 комментариев:

  1. Спасибо за простое и понятное объяснение, а то похоже все программисты контролов склонны к показу как может круто выглядеть их таблица и т.п., но забывают суть - как с этим работать (может правда для профи это не проблема, но иногда трудно понять как сделать и сделать правильно)

    ОтветитьУдалить
  2. Просто и понятно. А вот Sql таблицу как-то
    привязать можно?

    ОтветитьУдалить
  3. круть, теперь я гуру :) разобрался, что к чему.

    ОтветитьУдалить
  4. "Есть такой замечательный контрол для WPF – DataGrid" - чес говоря уже некоторое время его проклинаю т.к. не осилил добавление новых строк.. но теперь взглянул на него иначе. Спасибо за эту запись)

    ОтветитьУдалить
  5. А как проапдейтить таблицу подключенную к этому гриду?

    ОтветитьУдалить
  6. А как быть если не знаешь сколько будет полей класса? Может 5 а может 2...
    Как обойтись без класса?

    ОтветитьУдалить
  7. AutoGenerateColumns="True"
    AutoGeneratingColumn="функция"

    ОтветитьУдалить