2016-08-18 33 views
0

我試圖更新數據網格多行,代碼就完事了,但我仍然似乎得到未設置爲實例的更新多條記錄從一個GridView C#

對象引用一個對象

當我檢查記錄時,所需的狀態會相應更新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(); 
    } 
} 

非常感謝您! :)

+0

對於這個也許不會重複,請在它與什麼樣的數據會發生什麼行和調試它 –

+0

你能分享的GridView colums當你看到指定? –

回答

0

既然你不與其中異常被拋出的信息提供給我們,我會以爲這是一個的.ToString()調用,因爲這些是最有可能的。可能WorkerStatus或FullName的其中一個值爲空,導致在調用.ToString()方法時發生異常。

我會在調用.ToString()之前檢查null的值。這使您可以用一些有意義填寫的參數值,如果你想讀值爲null:

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

,當然還有:

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 

您可以使用此此語句減少至一個線你應該爲FullName做同樣的事情。

0

試試這個,而不是.ToString()使用Convert.Tostring(row.Cells["FullName"].Value) 同爲「WorkStatus」

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