2012-07-25 2 views
1

Я пытаюсь создать DataGridView, который отображает данные из базы данных SQL (GSM.sdf) и сохраняет изменения, внесенные в DataGridView, обратно в базу данных при нажатии кнопки сохранения. Данные отображаются нормально, но ничего не происходит при нажатии кнопки сохранения. Я следовал за верхний ответ из этой темы:Сохранение изменений из DataGridView обратно в базу данных SQL?

http://social.msdn.microsoft.com/Forums/en/csharpgeneral/thread/98bc0b4d-a2ea-4b74-81f0-473da624528a

Но это не получается. Вот мой код:

namespace WindowsFormsApplication5 
{ 
    public partial class Zeelot : Form 
    { 
     DataTable table = new DataTable(); 
     SqlCeDataAdapter z; 
     DataSet gSMDataSet = new DataSet(); 
     public Zeelot() 
     { 
      InitializeComponent(); 
     } 
     private void Zeelot_Load(object sender, EventArgs e) 
     { 
      string b = @"Data Source =.\SQLEXPRESS;database=GSM;Integrated Security=FALSE;Connection Timeout=30;User Instance=FALSE"; 
      SqlCeConnection conn = new SqlCeConnection(b); 
      conn.Open(); 
      string cd = "SELECT * FROM PhoneNumbers"; 
      z = new SqlCeDataAdapter(cd, conn); 
      z.Fill(gSMDataSet, "PhoneNumbers"); 
      table = gSMDataSet.Tables[0]; 
      conn.Close(); 
      dataGridView1.DataSource = table; 
     } 
     private void SaveButton_Click(object sender, EventArgs e) 
     { 
      SqlCeCommandBuilder local_SqlCommandBuilder = new SqlCeCommandBuilder(z); 
      local_SqlCommandBuilder.ConflictOption = System.Data.ConflictOption.OverwriteChanges; 
      z.UpdateCommand = local_SqlCommandBuilder.GetUpdateCommand(); 
      z.Update(((System.Data.DataTable)this.dataGridView1.DataSource)); 
      ((System.Data.DataTable)this.dataGridView1.DataSource).AcceptChanges(); 
     } 

    } 
} 

ответ

1

Я считаю, что ваша проблема лежит где вы закидывающие DataSource для System.Data.DataTable

Try z.Update (gSMDataSet);

Я также не считаю, что вам нужно AcceptChanges()

0
  1. вам не нужно вызывать .AcceptChanges() на DataGridView в конце. AcceptChanges() представляет изменения из DGV к подключенному DataSource (ваш DataTable)

Попробуйте позвонить AcceptChanges(), прежде чем пытаться представить изменения в вашей базе данных.

  1. Я думаю, что ваша проблема связана с вашим подключением. Вы вручную создаете и открываете соединение и назначаете его вашему DataAdapter. Но в рамках метода _Load() вы закрываете соединение. Поскольку DataAdapter, используемый внутри _Click EventHandler, такой же, как тот, который используется в вашем методе _Load() (поэтому использует то же соединение). Он не может вносить изменения в вашу базу данных, поскольку вы уже закрыли соединение.

У вас нет исключений во время выполнения?

Попробуйте использовать контрольные точки, чтобы проверить текущее состояние вашего соединения. Объект перед попыткой отправить ваши изменения в свою базу данных.

Также AFAIK MS рекомендует создавать соединения вручную, если вы хотите использовать их в DataAdapter.

Конструктор DataAdapter может создавать соединение самостоятельно

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