C # DataGridView извлечение устаревших результатов из базы данных, когда дочерняя форма закрыта - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть форма, которая открывает диалоговое окно , которое содержит DataGridView.

Когда я дважды щелкаю DataGridView, он открывает дочернюю форму, которая содержит детали этой строки.

После сохранения обновлений дочерняя форма закрывается, и DataGridView должен быть обновлен.

Однако я заметил, что функция обновления DataGridView не возвращает нужные данные из базы данных.Он получает данные ПЕРЕД обновлением, а не ПОСЛЕ обновления, поэтому отображаются неверные данные.

Я не уверен в том, как продолжить, поскольку мой текущий метод заключается в обновлении DataGridView непосредственно из дочерней формы

Вот мой код

Это действие двойного щелчка, чтобы открыть дочернюю форму

private void fieldsDataGridView_DoubleClick(object sender, EventArgs e)
{
    foreach (DataGridViewRow row in fieldsDataGridView.SelectedRows)
    {
        fieldIdInput.Text = row.Cells["Id"].Value.ToString();
        DialogResult dr = new DialogResult();
        EditFields editFields = new EditFields(this,programIdInput.Text, fieldIdInput.Text, false);
        editFields.Show();
    }
}

Это функция обновления, содержащаяся в первой форме

public 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.Refresh();
    fieldsDataGridView.ClearSelection();
}

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);
}

Это конструктор дочерних форм

private string ProgramId;
private string FieldId;
private bool IsNew;
private Fields Field;
ProgramsData programsData = new ProgramsData();
FieldsData fieldsData = new FieldsData();
PrinterData printerData = new PrinterData();

public EditFields(Fields Field, string ProgramId, string FieldId, bool IsNew)
{
    this.ProgramId = ProgramId;
    this.FieldId = FieldId;
    this.IsNew = IsNew;
    this.Field = Field;
    InitializeComponent();
    this.FormClosing += new FormClosingEventHandler(this.EditFields_FormClosing);
}

Это функция закрытия дочерних форм

private void EditFields_FormClosing(object sender, FormClosingEventArgs e)
{
    Field.RefreshDataGrid();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...