Member 10696161 Ответов: 1

Как вставить новую строку datagridview в набор данных и обновить ее в базе данных?


Всем привет

Я начал программировать на C#. У меня есть проблема: я создал таблицу "проекты" с 2 строками, которые запрограммированы в
get; set; 
класс: ID, PROJECTS_NAME. Я уже закончил с редактированием значений в этой таблице:

private void dataGridView4_CellEndEdit(object sender, DataGridViewCellEventArgs e)
       {
           string name_project = dataGridView4.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString();
           string id = dataGridView4.Rows[e.RowIndex].Cells[0].Value.ToString();

           MySqlConnection connection = new MySqlConnection("datasource = localhost; port = 3306; username = root; password = ");
           MySqlCommand cmd = new MySqlCommand("UPDATE projekt1.projects SET PROJECTS_NAME = @PROJECTS_NAME WHERE ID = @ID", connection);

           cmd.Parameters.Add("@ID", MySqlDbType.Int64).Value = int.Parse(id);
           cmd.Parameters.Add("@PROJECTS_NAME", MySqlDbType.VarChar).Value = name_project;

           try
           {
               connection.Open();
               cmd.ExecuteNonQuery();
               connection.Close();
           }
           catch (Exception ex)
           {
               MessageBox.Show(ex.Message);
           }
       }


Столбцы SQL в таблице проектов:
PROJECT_NAME VARCHAR
ID INT

И это прекрасно работает. Но у меня есть проблема с вставкой новой строки и автоматическим сохранением в базе данных.

Что я уже пробовал:

Я пробовал с RowValidated Event:

private void dataGridView4_RowValidated(object sender, DataGridViewCellEventArgs e)
     {
         string name_project = dataGridView4.Rows[e.RowIndex].Cells[1].Value.ToString();
         string id = dataGridView4.Rows[e.RowIndex].Cells[0].Value.ToString();

         MySqlConnection connection = new MySqlConnection("datasource = localhost; port = 3306; username = root; password = ");
         MySqlCommand cmd = new MySqlCommand("INSERT INTO projekt1.projects(PROJECT_NAME) VALUES(@NPROJECT_NAME);", connection);

         cmd.Parameters.Add("@ID", MySqlDbType.Int64).Value = int.Parse(id);
         cmd.Parameters.Add("@PROJECT_NAME", MySqlDbType.VarChar).Value = name_project;

         try
         {
             connection.Open();
             cmd.ExecuteNonQuery();
             connection.Close();

             MessageBox.Show("ok");
         }
         catch (Exception ex)
         {
             MessageBox.Show(ex.Message);
         }

         try
         {
             connection.Open();
             cmd.ExecuteNonQuery();
             connection.Close();
         }
         catch (Exception ex)
         {
             MessageBox.Show(ex.Message);
         }


Но это не сработало из-за того, что
System.FormatException: "Invalid input string format."


Может ли кто-нибудь объяснить, как это решить? Я кое-что искал, но не знаю, как с этим справиться. Приветствия

1 Ответов

Рейтинг:
0

RASHID ALI786

Вы должны использовать

UserAddedRow
вместо этого
RowValidated


 private void dataGridView4_UserAddedRow(object sender, DataGridViewRowEventArgs e)
     {
         string name_project = e.Row.Cells.Cells[1].Value.ToString();
         int id = Convert.ToInt64(e.Row.Cells[0].Value.ToString());

         MySqlConnection connection = new MySqlConnection("datasource = localhost; port = 3306; username = root; password = ");
         MySqlCommand cmd = new MySqlCommand("INSERT INTO projekt1.projects(PROJECT_NAME) VALUES(@NPROJECT_NAME);", connection);

         cmd.Parameters.Add("@ID", MySqlDbType.Int64).Value = id;
         cmd.Parameters.Add("@PROJECT_NAME", MySqlDbType.VarChar).Value = name_project;

         try
         {
             connection.Open();
             cmd.ExecuteNonQuery();
             connection.Close();

             MessageBox.Show("ok");
         }
         catch (Exception ex)
         {
             MessageBox.Show(ex.Message);
      }   
}


Member 10696161

Я пробовал с помощью события UserAddedRow:

private void dataGridView4_UserAddedRow(object sender, DataGridViewRowEventArgs e)
        {

            string name_project= e.Row.Cells[1].Value.ToString();
            int id = (int)Convert.ToInt64(e.Row.Cells[0].Value.ToString());

            MySqlConnection connection = new MySqlConnection("datasource = localhost; port = 3306; username = root; password = ");
            MySqlCommand cmd = new MySqlCommand("INSERT INTO projekt1.projects(PROJECT_NAME) VALUES(@NPROJECT_NAME);", connection);


            cmd.Parameters.Add("@ID", MySqlDbType.Int64).Value = id;

            cmd.Parameters.Add("@PROJECT_NAME", MySqlDbType.VarChar).Value = name_project;


            try
            {
                connection.Open();
                cmd.ExecuteNonQuery();
                connection.Close();

                MessageBox.Show("ok");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }


но есть исключение в нижеследующем
System.NullReferenceException: The object reference has not been set to the instance of the object. System.Windows.Forms.DataGridViewCell.Value.get returned null.”

Richard Deeming

Попробуйте удалить следующие две строки:

int id = (int)Convert.ToInt64(e.Row.Cells[0].Value.ToString());

cmd.Parameters.Add("@ID", MySqlDbType.Int64).Value = id;

Вы не вставляете идентификатор, поэтому вам не нужен параметр для него.