2013-09-30 88 views
0

我已經使用這個代碼(使用DataGrid的SQLCE)添加表我DATAS:添加,更新,刪除DATAS表DataGrid中

private void btn_functions_Click(object sender, EventArgs e) 
     { 
      string conSTR = @"Data Source=C:\Users\Zet\DB\javascript_db.sdf"; 
      SqlCeConnection connection = new SqlCeConnection(conSTR); 

      string sql = "SELECT * FROM Functions"; 
      connection.Open(); 

      SqlCeCommand cmd = new SqlCeCommand(sql, connection); 
      SqlCeDataAdapter da = new SqlCeDataAdapter(cmd); 
      DataSet ds = new DataSet(); 
      da.Fill(ds); 

      //for datagridview for js 
      dg_JS1.DataSource = ds.Tables[0]; 
      connection.Close(); 
     } 

(你可以在這裏看看結果:http://oi42.tinypic.com/30sc6qf.jpg

問題是我不知道如何添加/編輯/刪除特定單元格直接到datagrid本身。並直接保存到我的數據庫表中。

示例場景將有3個按鈕用於添加/編輯/刪除,然後讓我說我在單元格中添加文本,然後當我按btn_Add時,數據應該添加到數據網格並直接到表,如果我按btn_Edit,所有數據我更新應該從datagrid更新到數據庫,如果刪除,我選擇的所有數據/單元格中的文本將自動刪除相同的表。

或其他的想法,可... ...

任何想法,我該怎麼辦呢?

非常感謝!更多的權力!

+0

您必須以其他方式使用DataTable和DataGrid。將DataTable綁定到DataGrid,並且當您更改DataTable時,它將反映在DataGrid中。 –

+0

我該怎麼做?對不起有點混淆你說@MikedeKlerk – Elegiac

回答

0

我解決了沒有按鈕的問題。在下面的代碼I'll給你一個例子的連接和更新如何與一個MySQL數據庫(在運行時更新):

CODE

DataTable dt = null; 
DataGridView dgv1 = null; 

如果您有窗體加載您的DT變量設置爲一個新的DataTable:

private void Form1_Load(object sender, EventArgs e) 
{ 
    dt = new DataTable(); 



    using (MySqlConnection conn = new MySqlConnection("datasource=localhost;port=3306;username=root;password=1234")) 
    { 
     conn.Open(); 
     using (MySqlCommand cmd = new MySqlCommand()) 
     { 
      cmd.Connection = conn; 
      cmd.CommandText = "select *from try.data ;"; 
      MySqlDataAdapter da = new MySqlDataAdapter(cmd); 
      da.Fill(dt); 
     } 
     conn.Close(); 
    } 

    dgv1 = new DataGridView(); 
    dgv1.AllowUserToAddRows = false; 
    dgv1.CellEndEdit += new DataGridViewCellEventHandler(dgv_CellEndEdit); 
    dgv1.CellValidating += new DataGridViewCellValidatingEventHandler(dgv_CellValidating); 
    dgv1.Dock = DockStyle.Fill; 
    dgv1.DataSource = dt; 

    this.Controls.Add(dgv1); 
} 

你必須設置兩個事件:CellValidating

private void dgv_CellValidating(object sender, DataGridViewCellValidatingEventArgs e) 
    { 
     InitializeComponent(); 
     if (e.ColumnIndex == 0) 
     { 
      dgv1.CancelEdit(); 
     } 
    } 

和CellValidating事件:

private void dgv_CellEndEdit(object sender, DataGridViewCellEventArgs e) 
    { 
     string id = dt.Rows[e.RowIndex]["Eid"] + ""; 
     string col = dt.Columns[e.ColumnIndex].ColumnName; 
     string data = dgv1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value + ""; 

     string sql = string.Format("UPDATE `try`.`data` SET `{0}` = '{1}' WHERE Eid = {2};", col, data, id); 

     using (MySqlConnection conn = new MySqlConnection("datasource=localhost;port=3306;username=root;password=1234")) 
     { 
      conn.Open(); 
      using (MySqlCommand cmd = new MySqlCommand()) 
      { 
       cmd.Connection = conn; 
       cmd.CommandText = sql; 
       cmd.ExecuteNonQuery(); 
      } 
      conn.Close(); 
     } 
    } 

這aktually與MySQL,但在SQL工作就像關閉SqlConnection或SqlCommand的「平等」的部件......我希望這個解決你的問題。祝你今天愉快!