привязать более одной dataGridView к базе данных MySQL - PullRequest
0 голосов
/ 22 мая 2011

У меня есть база данных MySQL с четырьмя таблицами, и я написал пример метода привязки. Но это решение хорошо работает только с одной таблицей. Если я связываю более одного, dataGridViews будут заполнены информацией, но команды Update и Delete будут работать плохо.

 public void Bind(DataGridView dataGridView, string tableName)
    {
        string query = "SELECT * FROM " + tableName;

        mySqlDataAdapter = new MySqlDataAdapter(query, conn);
        mySqlCommandBuilder = new MySqlCommandBuilder(mySqlDataAdapter);

        mySqlDataAdapter.UpdateCommand = mySqlCommandBuilder.GetUpdateCommand();
        mySqlDataAdapter.DeleteCommand = mySqlCommandBuilder.GetDeleteCommand();
        mySqlDataAdapter.InsertCommand = mySqlCommandBuilder.GetInsertCommand();

        dataTable = new DataTable();
        mySqlDataAdapter.Fill(dataTable);

        bindingSource = new BindingSource();
        bindingSource.DataSource = dataTable;

        dataGridView.DataSource = bindingSource;
    }

Должен ли я использовать разные mySqlDataAdapter или mySqlCommandBuilder для каждой новой таблицы? Я использовал разные объекты DataTable и BindingSource, но когда я вставил новую строку в одну таблицу, у меня возникло исключение, что я оставил пустое поле в другой таблице. Какие-либо решения или советы для этой проблемы?

Заранее спасибо!

1 Ответ

0 голосов
/ 12 ноября 2015

Лучше поздно, чем никогда, я думаю ...

У меня есть приложение, которое загружает разные таблицы в один и тот же DataGridView с помощью Visual Studio 2013. Пока это работает!

1.DataTable

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

dataTable.Clear()

поможет, но нет, он оставляет старые заголовки столбцов, поэтому ваша новая таблица загружается справа от всех старых столбцов :-(. Интересно, если ваш новыйУ таблицы есть столбец с тем же именем, что и у старого. Он объединяет их!

2. MySqlAdapter

В настоящее время я создаю новый столбец для каждой таблицы, но на самомПо крайней мере, ваш SQL-запрос меняется, поэтому вам нужно создать новую команду SelectCommand:

MySqlCommand cmd = new MySqlCommand("SELECT * FROM `" + tableName + "`", conn);
sqlAdapter.SelectCommand = cmd;

Я пробовал это, и это похоже на работу, но на самом деле проще просто создать новый MySqlAdapter и производительность действительно неНа данный момент это не проблема!

3. SqlCommandBuilder

Да, вы должны создать новую, потому что команды обновления и удаления будут разными. Я неиспользуйте переменную класса, но создайте ее динамически (т. е. как локальную переменную), когда она мне понадобится.

4. BindingSource

Не думаю, что вам нужна новаяBindingSource, но я не использовалих очень много, поэтому не могу быть уверен.

...