У меня есть DataGridView внутри формы, которая отображает данные из базы данных каждый раз, когда я загружаю страницу следующим образом:
private void LoadList(string Input)
{
fieldsDataGridView.DataSource = null;
List<Field> fields = new List<Field>();
fields = fieldsData.GetAllByTaskId(Input);
List<FieldsDGViewModel> fdgvm = new List<FieldsDGViewModel>();
foreach (var item in fields)
{
var f = new FieldsDGViewModel
{
Id = item.Id,
Name = item.Name,
Order = item.Order,
IsPrint = item.IsPrint
};
fdgvm.Add(f);
}
fdgvm = fdgvm.OrderBy(x => x.Order).ToList();
fieldsDataGridView.DataSource = fdgvm;
fieldsDataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
fieldsDataGridView.Columns["Id"].Visible = false;
fieldsDataGridView.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);
}
Когда я дважды щелкаю по записи в моем списке, открывается диалоговое окносодержит форму и загружает соответствующие данные из этой записи.Когда я сохраняю детали, диалоговое окно закрывается, и в классе, где находится мой DataGridView, есть эта функция FormClose, которая обновляет DataGridView.
private void FormClosed(object sender, FormClosedEventArgs e)
{
RefreshDataGrid();
RecursiveClearInputs(this.Controls);
fieldIdInput.Text = "";
}
private void RefreshDataGrid()
{
var selected = programInput.SelectedValue;
if (selected != null)
{
var result = programsData.Get(selected.ToString());
if (result != null)
{
programIdInput.Text = result.Id;
LoadList(result.Id);
}
}
if (selected == "-1")
{
RecursiveClearInputs(this.Controls);
programIdInput.Text = "";
fieldIdInput.Text = "";
fieldsDataGridView.DataSource = null;
}
fieldsDataGridView.ClearSelection();
}
Однако у меня возникает эта проблема, когда единственный способ, которыммой DataGridView обновляется правильно, если я закрою основную форму, в которой я нахожусь, и снова открою ее.
Я отладил и смог получить некоторые результаты.
Изображение 1: Сразу после закрытия формы обновления.В списке полей только одна запись может иметь IsPrint = true.Однако изображение показывает, что оба значения верны.
Изображение 2: После закрытия и повторного открытия страницы, содержащей DataGridView, отображается правильный результат.Только 1 IsPrint = true.
Я пробовал много способов решить эту проблему, но я не уверен, почему она не обновляется должным образом.
Этокак открыть диалог
EditFields editFields = new EditFields(programIdInput.Text, fieldIdInput.Text, false);
editFields.FormClosed += new FormClosedEventHandler(FormClosed);
editFields.ShowDialog();
РЕДАКТИРОВАТЬ:
Я добавил проверку результатов диалога, но она все еще не обновляет представление таблицы данных должным образом.Может быть, проблема в теме?
dr = editFields.ShowDialog();
if (dr == DialogResult.OK)
{
RefreshDataGrid();
RecursiveClearInputs(this.Controls);
fieldIdInput.Text = "";
}