Я пытаюсь изменить столбец в моей DataGrid на DatePicker, чтобы иметь возможность выбирать дату из календаря, однако у меня возникает проблема: когда выбирается дата и я меняю строки, она не запускает событие обновить базу данных.
Вот некоторый код:
Создание столбца как DatePicker:
templateColumn = new DataGridTemplateColumn();
templateColumn.Header = "Date";
FrameworkElementFactory datePickerFactoryElem = new FrameworkElementFactory(typeof(DatePicker));
templateColumnBinding = new Binding("date_time");
templateColumnBinding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
templateColumnBinding.Mode = BindingMode.TwoWay;
datePickerFactoryElem.SetValue(DatePicker.SelectedDateProperty, templateColumnBinding);
datePickerFactoryElem.SetValue(DatePicker.DisplayDateProperty, templateColumnBinding);
DataTemplate cellTemplate = new DataTemplate();
cellTemplate.VisualTree = datePickerFactoryElem;
templateColumn.CellTemplate = cellTemplate;
DataGrid_training_dataEntry.Columns.Add(templateColumn);
Триггер 1 (обнаружение обновления строки):
private void DataGrid_training_dataEntry_RowEditEnding(object sender, DataGridRowEditEndingEventArgs e)
{
DataRowView rowView = e.Row.Item as DataRowView;
rowBeingEdited_DataGrid_training_dataEntry = rowView;
}
Событие 2 (вставка измененной строки):
private void DataGrid_training_dataEntry_CurrentCellChanged(object sender, EventArgs e)
{
if (rowBeingEdited_DataGrid_training_dataEntry != null)
{
DataGrid_training_dataEntry.CommitEdit();
MySqlCommand cmdInsert;
MySqlCommand cmdUpdate;
cmdUpdate = new MySqlCommand("UPDATE training SET id_training=@id_training,id_type=@id_type,id_value_0001=@id_value_0001,id_value_0002=@id_value_0002,id_value_0003=@id_value_0003,id_value_0004=@id_value_0004,id_value_0005=@id_value_0005,value_value_0001=@value_value_0001,value_value_0002=@value_value_0002,value_value_0003=@value_value_0003,value_value_0004=@value_value_0004,value_value_0005=@value_value_0005,date_time=@date_time,duration=@duration where id_training=@id_training", conn);
cmdUpdate.Parameters.Add("@id_training", MySqlDbType.LongText, 15, "id_training");
cmdUpdate.Parameters.Add("@id_type", MySqlDbType.LongText, 15, "id_type");
cmdUpdate.Parameters.Add("@id_value_0001", MySqlDbType.LongText, 15, "id_value_0001");
cmdUpdate.Parameters.Add("@id_value_0002", MySqlDbType.LongText, 15, "id_value_0002");
cmdUpdate.Parameters.Add("@id_value_0003", MySqlDbType.LongText, 15, "id_value_0003");
cmdUpdate.Parameters.Add("@id_value_0004", MySqlDbType.LongText, 15, "id_value_0004");
cmdUpdate.Parameters.Add("@id_value_0005", MySqlDbType.LongText, 15, "id_value_0005");
cmdUpdate.Parameters.Add("@value_value_0001", MySqlDbType.LongText, 15, "value_value_0001");
cmdUpdate.Parameters.Add("@value_value_0002", MySqlDbType.LongText, 15, "value_value_0002");
cmdUpdate.Parameters.Add("@value_value_0003", MySqlDbType.LongText, 15, "value_value_0003");
cmdUpdate.Parameters.Add("@value_value_0004", MySqlDbType.LongText, 15, "value_value_0004");
cmdUpdate.Parameters.Add("@value_value_0005", MySqlDbType.LongText, 15, "value_value_0005");
cmdUpdate.Parameters.Add("@date_time", MySqlDbType.DateTime, 15, "date_time");
cmdUpdate.Parameters.Add("@duration", MySqlDbType.LongText, 15, "duration");
cmdInsert = new MySqlCommand("INSERT INTO training (id_type,id_value_0001,id_value_0002,id_value_0003,id_value_0004,id_value_0005,value_value_0001,value_value_0002,value_value_0003,value_value_0004,value_value_0005,date_time,duration) VALUES (@id_type,2,id_value_0001,id_value_0002,@id_value_0003,@id_value_0004,id_value_0005,@value_value_0001,@value_value_0002,@value_value_0003,@value_value_0004,@value_value_0005,@date_time,@duration)", conn);
cmdInsert.Parameters.Add("@id_type", MySqlDbType.LongText, 15, "id_type");
cmdInsert.Parameters.Add("@id_value_0001", MySqlDbType.LongText, 15, "id_value_0001");
cmdInsert.Parameters.Add("@id_value_0002", MySqlDbType.LongText, 15, "id_value_0002");
cmdInsert.Parameters.Add("@id_value_0003", MySqlDbType.LongText, 15, "id_value_0003");
cmdInsert.Parameters.Add("@id_value_0004", MySqlDbType.LongText, 15, "id_value_0004");
cmdInsert.Parameters.Add("@id_value_0005", MySqlDbType.LongText, 15, "id_value_0005");
cmdInsert.Parameters.Add("@value_value_0001", MySqlDbType.LongText, 15, "value_value_0001");
cmdInsert.Parameters.Add("@value_value_0002", MySqlDbType.LongText, 15, "value_value_0002");
cmdInsert.Parameters.Add("@value_value_0003", MySqlDbType.LongText, 15, "value_value_0003");
cmdInsert.Parameters.Add("@value_value_0004", MySqlDbType.LongText, 15, "value_value_0004");
cmdInsert.Parameters.Add("@value_value_0005", MySqlDbType.LongText, 15, "value_value_0005");
cmdInsert.Parameters.Add("@date_time", MySqlDbType.DateTime, 15, "date_time");
cmdInsert.Parameters.Add("@duration", MySqlDbType.LongText, 15, "duration");
mySqlDataAdapter.InsertCommand = cmdInsert;
mySqlDataAdapter.UpdateCommand = cmdUpdate;
mySqlDataAdapter.Update(dataSet_training_dataEntry);
conn.Close();
conn.Dispose();
DataGrid_training_dataEntry.ItemsSource = null;
dataSet_training_dataEntry.Reset();
rowBeingEdited_DataGrid_training_dataEntry.EndEdit();
rowBeingEdited_DataGrid_training_dataEntry = null;
conn = new MySqlConnection(connStr);
mySqlDataAdapter = new MySqlDataAdapter("select * from training", conn);
command = conn.CreateCommand();
conn.Open();
mySqlDataAdapter.Fill(dataSet_training_dataEntry);
DataGrid_training_dataEntry.ItemsSource = dataSet_training_dataEntry.Tables[0].DefaultView;
conn.Close();
conn.Dispose();
DataGrid_training_dataEntry.Columns[1].IsReadOnly = false;
}
}
Событие 3 (регистрация изменения ячейки в качестве обновления строки):
private void DataGrid_training_dataEntry_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
{
if (!isManualEditCommit)
{
isManualEditCommit = true;
DataGrid grid = (DataGrid)sender;
grid.CommitEdit(DataGridEditingUnit.Row, true);
isManualEditCommit = false;
}
}
Когда я при изменении ячеек или строк ничего не происходит, хотя, если я изменю любую другую ячейку после выбора другой даты, обновление пройдет нормально (так как оно обнаружит изменение строки по сравнению с другой изменяемой ячейкой).
Может кто-нибудь предоставить немного помощи по этому поводу, пожалуйста?
Спасибо за ваше время и помощь, это очень ценится.