2013-03-25 3 views
0

Я искал некоторые сообщения, но все же не могу заставить их работать.Редактирование datagridview во время выполнения и база данных обновлений

У меня есть приложение окна, написанный на C#, Здесь я связать DataGridView к моей базе данных:

public static DataSet GetDataSet(string sql) 
    { 
     using (SqlConnection cn = new SqlConnection(constr)) 
     { 
      SqlDataAdapter da = new SqlDataAdapter(sql, cn); 
      DataSet ds = new DataSet(); 
      da.Fill(ds); 
      return ds; 

     } 
    } 

и я связать DataGridView в другом классе:

string sql = "select Amount, Price, Description from myTable"; 
ds = DbHelper.GetDataSet(sql); 
dataGridView2.DataSource = ds.Tables[0]; 

Я создал кнопку пользователь для обновления базы данных после редактирования данных datagridview:

string sql = "select Amount, Price, Description from myTable"; 
DbHelper.UpdateDataSet(sql, ds); 
MessageBox.Show("done"); 

public static void UpdateDataSet(string sql, DataSet ds) 
    { 
     using (SqlConnection cn = new SqlConnection(constr)) 
     { 
      SqlDataAdapter da = new SqlDataAdapter(sql, cn); 
      da.Update(ds); 
     } 
    } 

Адрес erro r, встречается на линии da.Update(ds);:

Обновление требует действительной UpdateCommand при передаче коллекции DataRow с измененными строками.

Спасибо за помощь.

EDIT я могу заставить его работать с этим:

SqlCommandBuilder commandBuilder = new SqlCommandBuilder(da); 
da.UpdateCommand = commandBuilder.GetUpdateCommand(); 

Но только тогда, когда я показываю ключ в DataGridView, а также, в противном случае:

Dynamic SQL поколения для UpdateCommand не поддерживается с помощью команды SelectCommand, которая не возвращает никакой информации о столбце.

Как преодолеть это, если я не хочу показывать ключ в datagridview?

+0

Как вы ожидаете обновить базу данных оператором 'SELECT'? –

ответ

0

SqlCommandBuilder нуждается в основном ключе, чтобы обновить поле. Вы все равно можете загрузить ключ в DataGridView, но скрыть столбец.

+0

Это работает. Спасибо за советы – AkariKamigishi