2016-02-20 54 views
0

需要DatagridView的一些幫助& DataTable發送DataTable到存儲過程從C#

  • 基本上我有一個DatagridViewOnLoad與數據在SQL Server中填充從表
  • 當我點擊用戶界面的按鈕,這DataGridView增加了一個新的列到電網「更新」的前面是複選框列
  • 現在,當用戶勾選需要更新並且點擊更新的所有行時...
  • 我想更新所有打勾的行(例如:我希望將這些行的所有者設置爲人A到人B)
  • 我看了DataTable但我很困惑

我的邏輯是所有選擇的列添加到DataTable,並將其發送到SQL Server中的存儲過程,這將更新值。

如果我沒有記錯,我將用只是一個ID柱,然後From & To(業主)存儲過程發送DataTable

請指導我,如果我錯了,任何幫助將非常感激。

+0

重複http://stackoverflow.com/questions/9410018/c-sharp-sql-update-multiple-rows –

回答

1
private DataTable getDataGridID() 
{ 
    DataTable dt = new DataTable(); 
    dt.Columns.Add("ID"); 
    foreach (DataGridViewRow row in dgTeamDashboard.Rows) 
    { 
     if (Convert.ToBoolean(row.Cells["Update"].Value) == true) 
     dt.Rows.Add(row.Cells["ID"].Value); 
    } 
    return dt; 
} 

我現在已經進展到這裏,我有一個DataTable與所有這些ID的更新列被勾選。

我很有希望,我正朝着正確的方向前進。註釋如果我不是

進一步更新:

我現在已經創建,它接受UserDefinedTableType和destinationOwnerID作爲參數,並更新所提供的OWNERID實際的表,所有這些線索,其ID相匹配的存儲過程來自DataTable的記錄。

Create Procedure [activity].[udpUpdateActivityLead] 
@ActivityLeadTable ActivityLeadType READONLY, 
@OwnerTo   int 
AS 
BEGIN 
    UPDATE [activity].[tblActivity] 
    set [activity].[tblActivity].[IDOwner]= @OwnerTo 
    from @ActivityLeadTable 
    where [activity].[tblActivity].[ID]=[@ActivityLeadTable].[ID]; 

    END 

最後,我在我的用戶界面中得到了這個功能,就像一個創業板。快樂的結局......我可以現在就睡覺......

public void updateActivityLead() 
     { 
      SqlConnection con = new SqlConnection(OpSupLib.MyConnectionString); 
      SqlCommand cmd = new SqlCommand(); 
      if (con.State == System.Data.ConnectionState.Closed) 
       con.Open(); 

      cmd.CommandType = System.Data.CommandType.StoredProcedure; 
      cmd.CommandText = "[activity].[udpUpdateActivityLead]"; 

      SqlParameter p1 = new SqlParameter(); 
      p1.ParameterName = "@ActivityLeadTable"; 
      p1.Value = getDataGridID(); 
      cmd.Parameters.Add(p1); 

      SqlParameter p2 = new SqlParameter(); 
      p2.ParameterName = "@OwnerTo"; 
      p2.Value = ((ComboBoxItem)cmbUpdateTo.SelectedItem).HiddenValue; 
      cmd.Parameters.Add(p2); 

      cmd.Connection = con; 
      cmd.ExecuteNonQuery(); 
      if (con.State == System.Data.ConnectionState.Open) 
       con.Close(); 
     } 
+0

此代碼是相當危險因爲它沒有適當地清理外部資源。 'SqlConnection'和'SqlCommand'對象都是「一次性的」對象,因此或者需要封裝在'using()'構造中,或者在try/catch/finally中調用'Dispose()'方法。 'finally'塊。另外,你可以改變'cmd'的聲明爲'SqlCommand cmd = con.CreateCommand();',然後移除'cmd.Connection = con;':-)。 –

+0

@srutzky我已經相應地修改了代碼。非常感謝 – Shallo