从Data C发送DataTable到存储过程

时间:2016-02-20 18:47:54

标签: c# sql-server datagridview datatable

需要DatagridView&的帮助; DataTable

  • 基本上我有DatagridView OnLoad填充SQL Server中的表中的数据
  • 当我点击用户界面上的按钮时,此DataGridView会在网格前面添加一个新列"更新"这是一个复选框列
  • 现在,当用户勾选所有需要更新的行并点击更新...
  • 我想更新所有勾选的行(例如:我希望将这些行的所有者从人员A设置为人员B)
  • 我看过DataTable,但我很困惑

我的逻辑是将所有选定的列添加到DataTable并将其发送到SQL Server中的存储过程,该存储过程将更新值。

如果我没有弄错的话,我会发送一个DataTable只有一个ID列,然后是From& To(所有者)到存储过程。

如果我错了,请指导我,任何帮助都会非常感激。

1 个答案:

答案 0 :(得分: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

最后我在我的UI中使用了这个功能,就像GEM一样。快乐的结局......我现在可以去睡觉了......

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