C# 使用过程在插入后更新DataGrid

C# 使用过程在插入后更新DataGrid,c#,sql-server,datagridview,C#,Sql Server,Datagridview,我知道有人问过这个问题,但我不明白为什么这个行动如此复杂。 所以我有一个Produc表 SELECT TOP 1000 [IDProdus] ,[Denumire] ,[UM] ,[Pret] ,[IDFurnizor] ,[IDCategorie] ,[IDTipProdus] ,[OperatorAdaugare] ,[DataAdaugare] ,[OperatorModificar

我知道有人问过这个问题,但我不明白为什么这个行动如此复杂。 所以我有一个Produc表

SELECT TOP 1000 [IDProdus]
      ,[Denumire]
      ,[UM]
      ,[Pret]
      ,[IDFurnizor]
      ,[IDCategorie]
      ,[IDTipProdus]
      ,[OperatorAdaugare]
      ,[DataAdaugare]
      ,[OperatorModificare]
      ,[DataModificare]
  FROM [Proiect].[dbo].[Produse]
这是我的表的列。我通过VisualStudion的数据源GUI添加了一个包含此表内容的数据集(我没有编写实际代码)

现在我有了一个过程,可以在这个表中插入一个新行

这是密码

private void dToolStripMenuItem_Click(object sender, EventArgs e)
        { 
            SqlConnection conn = new SqlConnection("connection-string-here");
            string Query = "spGE_getProduse_Edit";         //Stored Procedure name 
            int Integer; 
            conn.Open();
            SqlCommand com = new SqlCommand(Query, conn );  //creating  SqlCommand  object
            com.CommandType = CommandType.StoredProcedure;  //here we declaring command type as stored Procedure
            com.Parameters.AddWithValue("@IDProdus", 0);       
            com.Parameters.AddWithValue("@Denumire ", denumireTextBox.Text.ToString());     
            com.Parameters.AddWithValue("@UM ",uMTextBox.Text.ToString());
            com.Parameters.AddWithValue("@Pret ", Double.Parse(pretTextBox.Text));
            com.Parameters.AddWithValue("@IDFurnizor ",Int16.Parse(iDFurnizorTextBox.Text));
            com.Parameters.AddWithValue("@IDCategorie ", Int16.Parse(iDCategorieCombobox.SelectedValue.ToString()));
            com.Parameters.AddWithValue("@IDTipProdus ", Int16.Parse(iDTipProdusCombobox.SelectedValue.ToString()));
            com.Parameters.Add("@IDProdusScris", SqlDbType.BigInt);
            com.Parameters["@IDProdusScris"].Direction = ParameterDirection.Output;
            com.ExecuteNonQuery();
            conn.Close();   
            Integer = Int32.Parse(com.Parameters["@IDProdusScris"].Value.ToString());


        }
现在,在插入之后,我想用新的记录更新myGrid。我试过了
dataGridView1.Refresh();
dataGridView1.Update()
没有结果。。。有没有办法更新网格?对于VS来说,这似乎是一个简单的任务,但我找不到简单的解决方案

我在msdn上看到和阅读的内容看起来像是一些非常复杂的操作,只是为了简单的刷新。(这是关于获取行的状态,并在添加状态时插入行)

有什么简单的方法可以做到这一点,或者我必须编写一个方法,每当我想刷新我的dataGridView时(我的意思是重新查询我的表并重建数据源)

像这样尝试:

dataGridView1.Refresh()
dataGridView1.Update()将不会从数据库获取更新的记录

您可以使用预编译的存储过程

Create Procedure Sp_getProducts
as
BEGIN
SELECT TOP 1000 [IDProdus]
      ,[Denumire]
      ,[UM]
      ,[Pret]
      ,[IDFurnizor]
      ,[IDCategorie]
      ,[IDTipProdus]
      ,[OperatorAdaugare]
      ,[DataAdaugare]
      ,[OperatorModificare]
      ,[DataModificare]
  FROM [Proiect].[dbo].[Produse]

END
使用此使用语句的代码

using (SqlConnection conn = new SqlConnection("connection-string-here"))
{
conn.Open();
using(SqlCommand cmd=new SqlCommand("Sp_getProducts",conn))
{
cmd.CommandType = CommandType.StoredProcedure; 
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable ds = new DataTable();
da.Fill(ds);
gridView.DataSource = ds;
gridView.DataBind();
conn.Close(); 
}

}

尝试重置数据源:

dataGridView1.DataSourcce = null;
dataGridView1.DataSource = [YOUR DATASET];
dataGridView1.Refresh();
dataGridView1.Update();

是的,您必须编写一个方法实际上,这是一个非常常见的神话-但SQL Server中的存储过程不是预编译的或类似的-有关详细信息,请参阅或其他来源