обновить объединенные таблицы, используя набор данных wpf sqlite

avatar
xoja
9 августа 2021 в 01:13
35
0
0

Я хочу обновить свою базу данных sqlite из сетки данных. У меня есть 2 отметки в таблицах и ученики. мой код xaml

               <DataGrid ItemsSource="{Binding}"  Name="dtGrid" BeginningEdit="dtGrid_BeginningEdit" RowEditEnding="dtGrid_RowEditEnding" AutoGenerateColumns="True" AutoGeneratingColumn="dtGrid_AutoGeneratingColumn" />
                

в панели стека Код С#
инициализирует форму

myConn.Open();
            myDataAdapter = new SQLiteDataAdapter
            {
                SelectCommand = new SQLiteCommand()
                {
                    Connection = myConn,
                    CommandText = "SELECT students.name, marks.One, marks.Two FROM marks INNER JOIN students on students.id == marks.id where marks.classId = 1" }
            };
            myDataSet = new DataSet();
            myDataAdapter.Fill(myDataSet, "marks");
            dtGrid.DataContext = myDataSet.Tables["marks"].DefaultView;

до этой части

 private void dtGrid_BeginningEdit(object sender, DataGridBeginningEditEventArgs e)
        {
            myBuilder = new SQLiteCommandBuilder(myDataAdapter);
            DataRowView myDRV = (DataRowView)dtGrid.SelectedItem;
            myDRV.BeginEdit();
        }
        private void dtGrid_RowEditEnding(object sender, DataGridRowEditEndingEventArgs e)
        {
            DataRowView myDRV = (DataRowView)dtGrid.SelectedItem;
            myDRV.EndEdit();
            myDataAdapter.UpdateCommand = (Finisar.SQLite.SQLiteCommand)myBuilder.GetUpdateCommand();
            myDataAdapter.Update(myDataSet, "marks");
        }
        private void dtGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
        {
            var tc = e.Column as System.Windows.Controls.DataGridTextColumn;
            var b = tc.Binding as System.Windows.Data.Binding;

            b.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
            b.ValidatesOnDataErrors = true;
            b.NotifyOnValidationError = true;

        }

при обновлении из сетки данных возникает ошибка повторной настройки "SQLiteCommandBuilder не может работать с запросами без уникальных или ключевых столбцов", хотя у меня есть первичный ключ

Источник
Zer0
9 августа 2021 в 02:04
0

Какая строка кода? Также я вижу, что myDataAdapter используется несколько раз, и выглядит как оставленный открытым. Это экземпляр адаптера данных, который вы всегда держите открытым? Вы действительно должны избегать этого. Оберните каждый экземпляр в блок using и создавайте новые по мере необходимости. Это поможет отладке, а также использованию базы данных.

Caius Jard
9 августа 2021 в 06:44
0

Это не так, как это должно было работать; вы не загружаете данные в таблицу данных с помощью JOIN, если хотите отредактировать ее и вернуть в базу данных. Конечно, его можно заставить работать (как и все остальное), но вам придется гораздо больше участвовать в определении запроса на обновление и настройке адаптера, который будет его использовать, чтобы он знал, какие исходные столбцы выбрать для отправки. таблицу оценок, игнорируя данные учащихся. Я бы написал полный ответ, который советует вам создать файл DataSet и добавить к нему адаптеры таблиц, но я точно не знаю, поддерживается ли он для SQLite.

Ответы (0)