2012-04-19 2 views
0

У меня есть очень простая таблица с двумя столбцами строки, отмеченными уникальными. Может ли кто-нибудь сказать мне, как подключить datagridview, чтобы разрешить самые основные операции crud. Я намерен использовать только сетку и никаких дополнительных элементов управления. Это означает наличие столбца ссылки для операции удаления.Winforms DataGridView SQL compact CRUD пример

Я попробовал миллион итераций, имеющих таблицы данных, привязка источников, адаптеры данных, команда строителей ..

Большое спасибо.

void dataGridView1_DataError(object sender, DataGridViewDataErrorEventArgs e) 
{ 

} 

private void bindingSource_PositionChanged(object sender, EventArgs e) 
{ 
     // if the user moves to a new row, check if the 
     // last row was changed 
     BindingSource thisBindingSource = 
      (BindingSource)sender; 

     DataRow ThisDataRow = 
      ((DataRowView)thisBindingSource.Current).Row; 
     if (ThisDataRow == _lastDataRow) 
     { 
      // we need to avoid to write a datarow to the 
      // database when it is still processed. Otherwise 
      // we get a problem with the event handling of 
      //the DataTable. 
      throw new InvalidOperationException("It seems the" + 
       " PositionChanged event was fired twice for" + 
       " the same row"); 
     } 

     UpdateRowToDatabase(); 
     // track the current row for next 
     // PositionChanged event 
     _lastDataRow = ThisDataRow; 
    } 

    private void UpdateRowToDatabase() 
    { 
     if (_lastDataRow != null) 
     { 
      if (_lastDataRow.RowState == DataRowState.Modified 
       || _lastDataRow.RowState == DataRowState.Added 
       || _lastDataRow.RowState == DataRowState.Deleted) 
      { 
       DataRow[] rows = new DataRow[1]; 
       rows[0] = _lastDataRow; 
       _dataAdapter.Update(rows); 
      } 
     } 
    }   

void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e) 
    { 
     Debug.WriteLine(string.Format("Click Col: {0} Row:{1}", e.ColumnIndex, e.RowIndex)); 

     if (!_edit && e.ColumnIndex == 0) 
     { 
      if (e.RowIndex < _dataTable.Rows.Count) 
      { 
       DataRow[] rows = new DataRow[1]; 
       rows[0] = _dataTable.Rows[e.RowIndex]; 
       _bindingSource.RemoveCurrent(); 
       _dataAdapter.Update(rows); 
      } 
     } 
    } 

ответ

0

Смотрите класс ResultSetGrid в проекте CodePlex здесь: http://sqlcetoolbox.codeplex.com/SourceControl/changeset/view/77500#1210725

+0

Это тронуло меня не вперед конца, спасибо. У меня все еще проблема с удалением записей. – Neil

+0

Ваш стол должен иметь первичный ключ - не так ли? – ErikEJ

+0

Да, у меня был первичный ключ. В конце я просто использовал элемент управления навигатором, на котором есть кнопка удаления. – Neil

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