从GridView C#更新多个记录

时间:2016-08-18 09:44:02

标签: c# asp.net gridview instance

我试图更新数据网格中的多行,代码完成了工作,但我似乎还是得到了

  

对象引用未设置为对象的实例

当我检查记录时,所需状态会相应地更新gridview中的所选记录。

private void UpdateWorkerStatus()
{
    SqlCommand cmdUpdate = new SqlCommand(@"UPDATE Workers2
                                       SET WorkerStatus = @WorkerStatus
                                       WHERE FullName = @FullName", cn);

    cmdUpdate.Parameters.AddWithValue("@WorkerStatus", SqlDbType.VarChar).Value = txtWorkerStatus.Text;
    cmdUpdate.Parameters.AddWithValue("@FullName", SqlDbType.VarChar).Value = txtFullName.Text;

    foreach (DataGridViewRow row in grdWorkers.Rows)
    {
        cmdUpdate.Parameters["@WorkerStatus"].Value = row.Cells["WorkerStatus"].Value.ToString();
        cmdUpdate.Parameters["@FullName"].Value = row.Cells["FullName"].Value.ToString();
        cmdUpdate.ExecuteNonQuery();
    }
}

提前谢谢! :)

3 个答案:

答案 0 :(得分:1)

private void UpdateWorkerStatus()
{
    SqlCommand cmdUpdate = new SqlCommand(@"UPDATE Workers2
                                   SET WorkerStatus = @WorkerStatus
                                   WHERE FullName = @FullName", cn);

    cmdUpdate.Parameters.AddWithValue("@WorkerStatus", SqlDbType.VarChar).Value = txtWorkerStatus.Text;
    cmdUpdate.Parameters.AddWithValue("@FullName", SqlDbType.VarChar).Value = txtFullName.Text;

    foreach (DataGridViewRow row in grdWorkers.Rows)
    {
        cmdUpdate.Parameters["@WorkerStatus"].Value = row.Cells["WorkerStatus"].Value!=DBNull.Value? row.Cells["WorkerStatus"].Value.ToString():"";
        cmdUpdate.Parameters["@FullName"].Value = row.Cells["FullName"].Value!= DBNull.Value ? row.Cells["FullName"].Value.ToString():"";
        cmdUpdate.ExecuteNonQuery();
    }
}

答案 1 :(得分:0)

试试这个,而不是.ToString()使用Convert.Tostring( row.Cells["FullName"].Value) 同样适用于" WorkStatus"

答案 2 :(得分:0)

由于您没有向我们提供抛出异常的位置的信息,因此我将假设它位于其中一个.ToString()调用上,因为它们最有可能。可能WorkerStatus或FullName的值之一为null,因此在调用.ToString()方法时会导致异常。

我会在调用.ToString()之前检查null的值。如果您尝试读取的值为null,则可以使用有意义的值填充参数值:

if (row.Cells["WorkerStatus"].Value != null)
    cmdUpdate.Parameters["@WorkerStatus"].Value = row.Cells["WorkerStatus"].Value.ToString();
else
    cmdUpdate.Parameters["@WorkerStatus"].Value = string.Empty // or some meaningful default value of your chosing

您可以使用以下方法将此语句缩减为一行:

cmdUpdate.Parameters["@WorkerStatus"].Value = (row.Cells["WorkerStatus"].Value != null) ? row.Cells["WorkerStatus"].Value.ToString() : string.Empty;

当然,你应该为FullName做同样的事情。