[英]How to insert new datagridview row in datagridview and update (automatically) in database?
在这种情况下,我从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;
它没有帮助。
有人可以写出解决方法吗? 我已经搜索过一些东西,但我不知道该如何处理。 问候。
您可以使用ShowNewButtonInHeader
属性
<Columns>
<dx:GridViewCommandColumn ShowNewButtonInHeader="true </dx:GridViewDataTextColumn>
</Columns>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.