2014-10-24 6 views
0

У меня возникли проблемы с обновлением данных из вида сетки данных с помощью кнопки. Текст доступен для редактирования, но изменения не сохраняются в базе данных SQLite. есть идеи?Обновление данных Datagridview с использованием базы данных SQLite

private void ProjectsAdmin_Load(object sender, EventArgs e) 
    { 
     // TODO: This line of code loads data into the 'seniorProjectsDataSet2.DataTable1' table. You can move, or remove it, as needed. 
     this.dataTable1TableAdapter.Fill(this.seniorProjectsDataSet2.DataTable1); 
    } 


    private void dataGridView1_CellContentClick_1(object sender, DataGridViewCellEventArgs e) 
    { 
     if (e.RowIndex == -1 || e.ColumnIndex != 3) //ignore header row and any column that doesnt have file name 
      return; 

     var filename = dataGridView1.CurrentCell.Value.ToString(); 

     if (File.Exists(filename)) 
      Process.Start(filename); 

    } 



    private void updateData_Click(object sender, EventArgs e) 
    { 

     SQLiteConnection conn = new SQLiteConnection(); 
     dataGridView1.EndEdit(); 

     dataTable1TableAdapter.Adapter.Update(seniorProjectsDataSet.Tables[0]); 


     for (int i = 0; i < seniorProjectsDataSet.Tables[0].Rows.Count; i++) 
     { 
      seniorProjectsDataSet.Tables[0].Rows[i].AcceptChanges(); 

     } 

    } 
} 

}

ответ

1

Я решил проблему без кнопки. В следующем коде я дам вам пример того, как соединение и обновление работает с MySQL-базы данных (обновление во время выполнения):

КОД

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 ... Я надеюсь, что это решать вам проблему. Хорошего дня!

+0

Я понимаю ваше решение, но мой datagridview отображается источником привязки с JOINS из трех разных таблиц. Я собираюсь каким-то образом реализовать ваше решение, чтобы соответствовать моей проблеме. Благодарю. – Onlytito

+0

Хорошо. Источник привязки на самом деле не имеет значения для этого решения. Код почти такой же. Надеюсь, вы сможете решить проблему с этим решением. Если это понравится, ответьте. – Xeidos

Смежные вопросы