2010-07-28 3 views
0

Может ли кто-нибудь указать мне на очень простой пример (C# 4.0) WPF Datagrid, привязанный к таблице SQL. Мне бы очень понравился простой пример. Я хочу иметь возможность добавлять, редактировать и удалять строки. Благодарю.WPF 2-Way Databound DataGrid

ответ

1

Похоже на старую нить, но, надеюсь, это все равно будет полезно. Если вы можете получить свои данные в ObservableCollection, то большая часть тяжелого материала будет сделана для вас. Оттуда вы можете просто сделать что-то вроде этого:

ObservableCollection<Items> ocItems = new ObservableCollection<Items>(); 
ocItems.Add(new Items()); 

dgGrid.ItemsSource = ocItems; 

или, если вы хотите сделать это в XAML, вы можете сделать что-то вроде этого:

<DataGrid Name="dgGrid" ItemsSource="{Binding ocItems, Mode=TwoWay}" AutoGenerateColumns="True" /> 

, а затем убедитесь, что у вас есть объект, называемый ocItems в вашем коде.

Используя ObservableCollection, вы автоматически добавляете и удаляете обновления для вас, поэтому вам не нужно указывать DataGrid для обновления. Используя привязку twoway, вы получаете любое редактирование, которое было сделано позаботиться о вас. Вы можете настроить внешний вид DataGrid с элементами DataGridColumns, но я позволю вам посмотреть на это.

0

Если вы ищете что-то настолько упрощенное, что все команды добавления/редактирования/удаления создаются/выполняются для вас, то я думаю, вам не повезло, потому что, насколько я знаю, вам нужно закодировать все это сам. Если вы, возможно, не используете ADO.NET и DataSets, потому что у Visual Studio есть мастера, которые будут генерировать операторы update/insert/delete/select для наборов данных ...

Я сам использую LINQ to SQL для всех своих связанных с SQL материалов, включая показывая данные в DataGrid. Это довольно просто, хотя я нашел DataGrid (v1, включенный в .NET Framework 4), наполовину испеченным куском cr * p, пронизанным ошибками и причудами. Но в целом шаги, необходимые для редактирования некоторых данных таблицы SQL, будут следующими:

1) Создайте файл «LINQ to SQL Classes» с вашей схемой SQL;

2) Загрузите данные в ваш datagrid, например. - this.DataGrid1.ItemsSource = новый BindingList ((из c в клиенте выберите c) .ToList());

3) Для привязок в столбцах DataGrid установите NotifyOnSourceUpdated в значение true, а затем обработайте событие SourceUpdated DataGrid. В обработчике событий вы можете вставить обновленный элемент (доступный через аргументы обработчика событий -> BindingOperations.GetBindingExpression (e.TargetObject, e.Property) .DataItem) в предварительно определенный HashSet (хешеты содержат только уникальные значения, поэтому, если несколько ячеек обновляются в одной строке, все равно будут только уникальные элементы в вашем хэш-наборе).

4) В обработчике событий щелчка мыши вы можете выполнить итерацию через HashSet и вернуть измененные данные обратно в базу данных SQL, снова через LINQ. Если столбцом первичного ключа является int, вы можете проверить новые строки с помощью item.Id == 0 (элемент - это перечисляемый объект из hashset), а затем вставить элемент в таблицу. В противном случае, если Id! = 0, выберите объект из базы данных с указанным идентификатором и обновите его свойства со значениями перечисленного элемента.