c# - 如何在 datagridview 中插入新的 datagridview 行并在数据库中(自动)更新?

标签 c# mysql .net datagridview insert

在本例中,我将项目表中的值显示到 datagridview 中,该表只有 2 列:

PROJECT_NAME VARCHAR
ID INT // Which is hidden in datagridview, and as AUTOINCREMENT

我已经编辑了此表中的值,并且工作正常:

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

但是我在插入新行并自动保存在数据库中时遇到问题。

我尝试过什么?

1)我尝试过 RowValidated 事件:

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."

2)我也尝试过 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);
            }
        }

但是下面有一个异常(exception):

System.NullReferenceException: The object reference has not been set to the instance of the object. System.Windows.Forms.DataGridViewCell.Value.get returned null.”

然后我尝试删除两行代码:

int id = (int)Convert.ToInt64(e.Row.Cells[0].Value.ToString());
cmd.Parameters.Add("@ID", MySqlDbType.Int64).Value = id;

这并没有帮助。

有人可以写一下如何解决吗?我已经搜索过一些东西,但我不知道如何处理。问候。

最佳答案

您可以使用ShowNewButtonInHeader属性

<Columns>
<dx:GridViewCommandColumn ShowNewButtonInHeader="true </dx:GridViewDataTextColumn>
</Columns>

关于c# - 如何在 datagridview 中插入新的 datagridview 行并在数据库中(自动)更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57026835/

相关文章:

c# - Assert.Fail 不会使测试失败?

mysql - 如何解决SQL中的LEFT JOIN问题?

mySQL:从上一个间隔获取 3 个月的间隔

c# - 使用 C# 写入 CSV 文件

C# WPF - 悬停时的自定义菜单项背景

c# - 如何比较不同的日期值

c# - 您可以更改类型化数据集提供程序吗?

MySQL:如何进行更快的 IP 范围查询?地理IP

.net - 你怎么称呼这些? [数组][字符串][整数]

.net - 为什么 IStructuralEquatable 和 IStructuralComparable 不是通用的?