У меня есть форма с DataGridView и кнопка.Когда форма загружается, все данные из БД загружаются в DataGridView.Идея состоит в том, что, когда пользователь нажимает кнопку, все модификации данных DataGridView загружаются в БД.Для этого я использую метод DataAdapter.Update (), который должен автоматически генерировать команду UPDATE для любых изменений в DataGridView.Проблема в том, что когда я вызываю этот метод для button1_click (), я получаю эту ошибку:
"InvalidOperationException: обновление требует, чтобы UpdateCommand был действительным, когда сбор данных DataRow задан с измененными строками"
(я получилсообщение об ошибке на испанском и перевел его, поэтому приведенный выше текст может быть бессмысленным).
У меня есть такой код:
public partial class Form1 : Form
{
OdbcConnection conn = new OdbcConnection();
OdbcDataAdapter adapter = new OdbcDataAdapter();
DataSet ds = new DataSet();
DataTable dt = new DataTable();
BindingSource bs = new BindingSource();
OdbcCommand command = new OdbcCommand();
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
dataGridView1.EndEdit();
adapter.Update(dt);
DataBind();
}
private void DataBind()
{
dataGridView1.DataSource = null;
dt.Clear();
String connectionString = "connectionStringWhichIsWorking";
String queryString1 = "SELECT * FROM myTable";
conn.ConnectionString = connectionString;
conn.Open();
OdbcCommand command = conn.CreateCommand();
command.CommandText = queryString1;
try
{
adapter = new OdbcDataAdapter(queryString1, conn);
adapter.Fill(dt);
bs = new BindingSource { DataSource = dt };
dataGridView1.DataSource = bs;
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
conn.Close();
}
private void Form1_Load(object sender, EventArgs e)
{
DataBind();
}
}
Этот код я нашел по другому похожему вопросу в StackOverflowи, кажется, работает для людей там.Для справки, вот откуда я получил этот код: Обновление базы данных с использованием Datagridview (ответ от пользователя wamsow).