0

У меня есть программа с 2-мя формами (программа подключена к базе данных сервера MSql).
В первой форме есть dataGridView1, она отображает данные из базы, когда я нажимаю на одну из тех строк в dataGridView1, появляется вторая форма с текстовыми полями и все данные, которые были в dataGridView1, переносятся на вторую форму в текстовых полях.

Пока все работает нормально. Во второй форме есть возможность изменить данные в текстовом поле, после изменения данных в текстовом поле нужно нажать на кнопку "Изменить" (эта кнопка вызывает метод "Изменить"), а затем кнопку "Сохранить" (эта кнопка вызывает метод Update, а в этом методе измененные данные должны попасть в базу), но когда я нажимаю на кнопку "Изменить" появляется ошибка.

Код второй формы, в которой есть кнопка:

    private void buttonChange2_Click(object sender, EventArgs e)
{
    MainForm mainForm = new MainForm();
    mainForm.Change();
}

код метода Change, который находится на главной форме (там, где dataGridView1):

    public void Change()
{
    Full_Inf_Form Full_Inf_Form = new Full_Inf_Form();
var selectedRowIndex = dataGridView1.CurrentCell.RowIndex; // <=== NRE exception

var id = Full_Inf_Form.textBoxID_Inf.Text;
var name = Full_Inf_Form.textBoxStNa_Inf.Text;
var lastname = Full_Inf_Form.textBoxLaNa_Inf.Text;
var patr = Full_Inf_Form.textBoxStPa_Inf.Text;
var numb = Full_Inf_Form.textBoxNumb_Inf.Text;
var email = Full_Inf_Form.textBoxEmail_Inf.Text;
var grup = Full_Inf_Form.textBoxGrup_Inf.Text;
var spec = Full_Inf_Form.textBoxSpec_Inf.Text;
var data = Full_Inf_Form.textBoxDataVst_Inf.Text;
var sypend = Full_Inf_Form.textBoxStSt_Inf.Text;
var mat = Full_Inf_Form.textBoxBalMat_Inf.Text;
var ukr = Full_Inf_Form.textBoxBalUkr_Inf.Text;
var eng = Full_Inf_Form.textBoxBalEng_Inf.Text;
if (dataGridView1.Rows[selectedRowIndex].Cells[0].Value.ToString() != string.Empty)
{
    dataGridView1.Rows[selectedRowIndex].SetValues(id, name, lastname, patr, numb, email, grup, spec, data, sypend, mat, ukr, eng);
    dataGridView1.Rows[selectedRowIndex].Cells[13].Value = RowState.Modified;
}

}

Ошибка появляется в: var selectedRowIndex = dataGridView1.CurrentCell.RowIndex;.

Это метод, передающий данные из dataGridView1 в textBox второй формы:

    private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
    selectedRow = e.RowIndex;
if (e.RowIndex >= 0)
{
    Full_Inf_Form Full_Inf_Form = new Full_Inf_Form();

    DataGridViewRow row = dataGridView1.Rows[selectedRow];

    Full_Inf_Form.textBoxID_Inf.Text = row.Cells[0].Value.ToString();
    Full_Inf_Form.textBoxStNa_Inf.Text = row.Cells[1].Value.ToString();
    Full_Inf_Form.textBoxLaNa_Inf.Text = row.Cells[2].Value.ToString();
    Full_Inf_Form.textBoxStPa_Inf.Text = row.Cells[3].Value.ToString();
    Full_Inf_Form.textBoxNumb_Inf.Text = row.Cells[4].Value.ToString();
    Full_Inf_Form.textBoxEmail_Inf.Text = row.Cells[5].Value.ToString();
    Full_Inf_Form.textBoxGrup_Inf.Text = row.Cells[6].Value.ToString();
    Full_Inf_Form.textBoxSpec_Inf.Text = row.Cells[7].Value.ToString();
    Full_Inf_Form.textBoxDataVst_Inf.Text = row.Cells[8].Value.ToString();
    Full_Inf_Form.textBoxStSt_Inf.Text = row.Cells[9].Value.ToString();
    Full_Inf_Form.textBoxBalMat_Inf.Text = row.Cells[10].Value.ToString();
    Full_Inf_Form.textBoxBalUkr_Inf.Text = row.Cells[11].Value.ToString();
    Full_Inf_Form.textBoxBalEng_Inf.Text = row.Cells[12].Value.ToString();
    Full_Inf_Form.Show();
}

}

Я попытался перенести метод Change из основной формы (где находится dataGridView1) во вторую форму, но это не помогло.

Сначала я сделал ту же программу, но текстовые поля и кнопка "Изменить" были в основной программе, то есть была только одна форма и все работало нормально, все данные, которые я изменил в текстовом поле, а затем нажал на кнопка «Изменить», а затем «Сохранить» попала в базу данных, и все заработало нормально.

Но я хотел, чтобы текстовые поля и кнопки «Изменить» и «Сохранить» были в другом виде.

Byb
  • 2,318
  • Ошибка говорит о том, что CurrentCell в данный момент отсутствует. Проверяйте на null прежде чем использовать. Используйте SelectedCells[0], например, хотя ее тоже надо проверять на количество перед использованием. Иначе будет исключение, если в коллекции 0 элементов. – aepot Apr 13 '23 at 19:32

0 Answers0