单击更新按钮时,数据网格视图未更新
本文关键字:更新 网格 视图 数据网 按钮 单击 数据 | 更新日期: 2023-09-27 18:30:48
实际上,当我单击数据网格视图的行或单元格时,它们会填充到文本框中进行编辑,在我编辑并更新后,datagrid视图不会立即更改,如果我关闭并再次运行表单,它正在发生变化。我的要求是它应该在我单击更新按钮后立即更改。我用于更新单击的代码是:
private void btnUpdate_Click(object sender, EventArgs e)
{
SqlConnection con = Helper.getconnection();
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandType = CommandType.Text;
string PrjID = txtPrjID.Text;
string PrjName = txtPrjNmae.Text;
string Description = txtPrjdescription.Text;
string Date = txtPrjDate.Text;
string Size = txtPrjSize.Text;
string Manager = txtPrjManager.Text;
cmd.CommandText = "Update Projects set ProjectName= '" + PrjName + "', Description='" + Description + "', DateStarted='" + Date + "',TeamSize='" + Size + "',Manager='" + Manager + "' where ProjectID= " + PrjID + " ";
MessageBox.Show("Project Details are updated");
dataGridView2.Update();
dataGridView2.Refresh();
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
请告诉我我犯了什么错误。
要
记住的两件重要事情:
首先,当使用数据库或流时,您应该使用 using
语句或尝试 catch 最后并关闭 finally
块中的连接。
其次,如果要在数据库更新后更新dataGridView
,则应在更新后执行此操作。 在您的代码中,您在更新之前执行此操作。
第三,也是最重要的一点,你的数据库命令是危险的,并且对SQL注入开放。 使用参数化命令几乎总是更好:
private void btnUpdate_Click(object sender, EventArgs e)
{
UpdateDB();
dataGridView2.Update();
dataGridView2.Refresh();
}
private void UpdateDB()
{
using (DbConnection con = Helper.getconnection())
{
con.Open();
using(DbCommand cmd = con.CreateCommand("Update Projects set ProjectName= @PrjName, Description=@Description, DateStarted=@Date, TeamSize=@Size,Manager=@Manager where ProjectID=@PrjID "))
{
cmd.CommandType = CommandType.Text;
cmd.Parameters.Add(new SqlParameter("PrjName", txtPrjNmae.Text));
cmd.Parameters.Add(new SqlParameter("Description", txtPrjdescription.Text));
cmd.Parameters.Add(new SqlParameter("Date", txtPrjDate.Text));
cmd.Parameters.Add(new SqlParameter("Size", txtPrjSize.Text));
cmd.Parameters.Add(new SqlParameter("Manager", txtPrjManager.Text));
cmd.Parameters.Add(new SqlParameter("PrjID", txtPrjID.Text));
cmd.Connection = con;
cmd.ExecuteNonQuery();
}
}
}
现在我不知道您如何将数据绑定到dataGridView
,但可能需要再次从数据库获取数据。 但是,这部分仅包含调用您在程序开始时执行的相同命令
好吧,
我会说你一开始就以错误的顺序调用事物......并且您确实应该在 using 语句中建立连接。
protected void btnUpdate_Click(object sender, EventArgs e)
{
// Update DB first
UpdateProjectDetails(txtPrjID.Text, txtPrjNmae.Text, txtPrjdescription.Text, txtPrjDate.Text, txtPrjSize.Text, txtPrjManager.Text);
// Fetch new results from DB
IEnumerable<ProjectDetail> projectDetails = GetProjectDetails();
// Update UI
dataGridView2.DataSource = projectDetails;
dataGridView2.Update();
dataGridView2.Refresh();
// Alert the user
MessageBox.Show("Project Details are updated");
}
public void UpdateProjectDetails(string prjID, string prjName string description, string date, string size, string manager)
{
using (DbConnection con = Helper.getconnection())
{
con.Open();
DbCommand cmd = con.CreateCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "Update Projects set ProjectName= '" + PrjName + "', Description='" + Description + "', DateStarted='" + Date + "',TeamSize='" + Size + "',Manager='" + Manager + "' where ProjectID= " + PrjID + " ";
cmd.Connection = con;
cmd.ExecuteNonQuery();
}
}
SqlConnection con = Helper.getconnection();
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
con.Open();
cmd.CommandType = CommandType.Text;
string PrjName = txtPrjNmae.Text;
string Description = txtPrjdescription.Text;
string Date = txtPrjDate.Text;
string Size = txtPrjSize.Text;
string Manager = txtPrjManager.Text;
cmd.CommandText = "Update Projects set Description='" + Description + "', DateStarted='" + Date + "',TeamSize='" + Size + "',Manager='" + Manager + "' where ProjectName= '" + PrjName + "' ";
MessageBox.Show("Project Details are updated");
dataGridView2.Update();
dataGridView2.Refresh();
cmd.ExecuteNonQuery();
con.Close();