Есть такой замечательный контрол для 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. Тогда не нужно будет обновлять таблицу каждый раз после изменения. Это будет делаться автоматически. Подробнее здесь. Вот и всё.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>
Спасибо за простое и понятное объяснение, а то похоже все программисты контролов склонны к показу как может круто выглядеть их таблица и т.п., но забывают суть - как с этим работать (может правда для профи это не проблема, но иногда трудно понять как сделать и сделать правильно)
ОтветитьУдалитьВсегда пожалуйста
ОтветитьУдалитьПросто и понятно. А вот Sql таблицу как-то
ОтветитьУдалитьпривязать можно?
круть, теперь я гуру :) разобрался, что к чему.
ОтветитьУдалить"Есть такой замечательный контрол для WPF – DataGrid" - чес говоря уже некоторое время его проклинаю т.к. не осилил добавление новых строк.. но теперь взглянул на него иначе. Спасибо за эту запись)
ОтветитьУдалитьА как проапдейтить таблицу подключенную к этому гриду?
ОтветитьУдалитьА как быть если не знаешь сколько будет полей класса? Может 5 а может 2...
ОтветитьУдалитьКак обойтись без класса?
AutoGenerateColumns="True"
ОтветитьУдалитьAutoGeneratingColumn="функция"