【问题标题】:Update DataGrid after insert with procedure使用过程插入后更新 DataGrid
【发布时间】:2014-11-11 19:09:28
【问题描述】:

我知道有人问过这个问题,但我不明白为什么这个操作如此复杂。 所以我有一个Produs

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

这是我的表格的列。我通过 Visual Studio 中的 Data Sources GUI 添加了 DataSet 与此表的内容(我没有编写实际代码)。

现在我有一个程序可以在这个表中插入一个新行。

代码如下:

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();
    // Creating SqlCommand object
    SqlCommand com = new SqlCommand(Query, conn );
    // Here we declaring command type as stored procedure:
    com.CommandType = CommandType.StoredProcedure;
    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(我的意思是重新查询我的表并重建dataSource

【问题讨论】:

  • 是的,你必须写一个方法

标签: c# sql-server datagridview


【解决方案1】:

试试这样:

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

Source

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

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语句的代码

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

}

【讨论】:

【解决方案2】:

尝试重置您的数据源:

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

【讨论】:

    猜你喜欢
    • 2011-11-08
    • 2011-11-19
    • 1970-01-01
    • 2013-12-12
    • 1970-01-01
    • 2014-06-23
    • 1970-01-01
    • 1970-01-01
    • 2017-12-02
    相关资源
    最近更新 更多