【问题标题】:How to insert new datagridview row in datagridview and update (automatically) in database?如何在datagridview中插入新的datagridview行并在数据库中(自动)更新?
【发布时间】:2019-07-14 11:08:05
【问题描述】:

在这种情况下,我将值从 Projects 表中显示到 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: "输入字符串格式无效。"

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

但在下面有这个例外:

System.NullReferenceException:对象引用尚未设置 到对象的实例。 System.Windows.Forms.DataGridViewCell.Value.get 返回 null。”

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

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

它没有帮助。

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

【问题讨论】:

  • 表名和列名INSERT INTO projekt1.projects (PROJECT_NAME) VALUES (@NPROJECT_NAME);中缺少空格。如果不起作用,则发生在哪一行错误
  • 没有需要手动更新数据库。使用 DataSource,DataAdapter 将为您完成。另一种方法是使用 ORM。使用它们中的任何一个都不需要这些代码。
  • @MangeshAuti 我不认为这与缺少表名和列名有关,因为与 System.NullReferenceException:“对象引用尚未设置为对象的实例有关。”。它显示在以下行:string name_project= e.Row.Cells[1].Value.ToString();
  • 第一个方法怎么样?哪一行错误来了
  • 什么样的方法? RowValidated?我认为只有当我更新某个 ID 的值时。

标签: c# mysql .net datagridview insert


【解决方案1】:

你可以使用ShowNewButtonInHeader属性

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

【讨论】:

  • 也许可以,但我使用的是 Windows 窗体应用程序。不是asp.net。
猜你喜欢
  • 1970-01-01
  • 2013-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-27
  • 1970-01-01
相关资源
最近更新 更多