2011-12-28 123 views
0

我已經在使用適配器進行編輯後更新datagridview到數據庫上了很多功能。我提到了幾個網站,給了我類似的例子,如下所示。但是,我在button2_Click的第一行出現「ArgumentNullException was unhandled」錯誤。從datagridview更新數據庫

我是編程新手,我被教導要將適配器聲明爲全局適配器,而且我也這樣做了。爲什麼我仍然得到空值?任何幫助,將不勝感激。謝謝!

DataTable dt; 
DataSet ds; 
OleDbDataAdapter objAdapter = new OleDbDataAdapter(); 

public void button1_Click(object sender, EventArgs e) 
{ 
    //Bind button 
    string txt = textBox1.Text; 

    string strOleDbConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Project.mdb"; 
    string strSqlStatement = string.Empty; 
    strSqlStatement = "SELECT * FROM jiahe WHERE [User] = '" + txt + "'"; 
    OleDbConnection objConnection = new OleDbConnection(strOleDbConnectionString); 
    objAdapter = new OleDbDataAdapter(strSqlStatement, objConnection); 
    DataSet ds = new DataSet(); 
    dataGridView1.DataSource = ds; 
    objAdapter.Fill(ds); 

    DataTable dt = ds.Tables[0]; 
    dataGridView1.DataSource = dt.DefaultView;   

    try 
    { 
     if (dt.Rows.Count == 1) 
     { 
      MessageBox.Show("Record found."); 
     } 
     else 
     { 
      if (dt.Rows.Count == 0) 
      { 
       MessageBox.Show("Invalid input!"); 
      } 
     } 
    } 
    catch 
    { 
     MessageBox.Show("Error!"); 
    } 
} 

private void button2_Click(object sender, EventArgs e) 
{ 
    objAdapter.Update(ds); 
    dataGridView1.DataSource = ds; 
} 

回答

1

我認爲這只是混淆了不同範圍內的變量。您在第二個button_click中使用的ds與用於填充網格的數據集不相同。使他們完全相同的實例,它將最有可能的工作。

編輯

做出這樣應該足夠寫的,而不是

DataSet ds = new DataSet(); 
dataGridView1.DataSource = ds; 
objAdapter.Fill(ds); 
DataTable dt = ds.Tables[0];` 

ds = new DataSet(); 
dataGridView1.DataSource = ds; 
objAdapter.Fill(ds); 
DataTable dt = ds.Tables[0];` 
+0

如何讓它們成爲完全相同的實例?不會讓它成爲一個全球變量來完成這項工作嗎? – Daz 2011-12-28 08:35:35

+0

@daz:看到我編輯的帖子。 – Tigran 2011-12-28 08:41:26

+0

謝謝。現在我把它指向了同一個ds。但是,我有另一個錯誤「InvalidOperationException未處理」。它說'更新需要一個有效的UpdateCommand通過修改的行傳遞DataRow集合。'爲什麼更新命令無效?請幫忙! – Daz 2011-12-28 08:44:01

0

我遇到同樣的問題,我試圖通過這個固定:

DataSet ds = new DataSet(); 
dataGridView1.DataSource = ds; 
objAdapter.Fill(ds); 
dataGridView1.DataSource = ds.Tables[0];