C # Обновление DataGridView / DataSource из MySQL - PullRequest
0 голосов
/ 27 мая 2019

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

В настоящее время я загружаю данные MySQL в DGV и обновляю аналогичным образом;

mySqlDataAdapter = new MySqlDataAdapter("SELECT * FROM a_Users;", connection); // Query the database
DataSet DS = new DataSet(); // Create new DataSet
mySqlDataAdapter.Fill(DS); // Fill the Dataset with the information gathered above
dataGridView1.DataSource = DS.Tables[0]; // Set the dgv source to the newly created DataSet

и при редактировании Iполучить строку DGV в DataRow, а затем обновить DGV, изменив DataRow следующим образом (из другой формы);

DataRow dr = (dataGridView1.Rows[SelectedRow].DataBoundItem as DataRowView).Row; // Get the selected row to a new DataRow
dr["Phone Number"] = PhoneNumber_tb.Text;

Моя проблема в том, что я хочу обновить DGV с помощью любых новых / измененных строкиз базы данных MySQL каждые XX секунд, и если изменение строки, когда это происходит, то DataRow становится недействительным, так как приведенный выше код повторно создает всю структуру.

Есть ли способ обновить источник данных DGV или DGV исохранить возможность использовать DataRow, который я извлек для редактирования?Как я могу обновить источник данных с любыми изменениями из базы данных MySQL.

Я пробовал BindingSource и целый ряд других вещей, которые я погуглил.

Я мог найти UserID в DGV, затем обновитьтаким образом, если здесь ответа не найдено.

В настоящее время при редактировании пользователя, если DGV обновляется с помощью базы данных SQL, моя форма редактирования не будет обновлять DGV, поскольку DataRow больше не существует там, где он был.

1 Ответ

0 голосов
/ 28 мая 2019

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

mySqlDataAdapter = new MySqlDataAdapter("SELECT * FROM a_Users WHERE DTGModified > " + LastUpdated.ToString() + ";", connection); // Query the database
DataTable DT = new DataTable(); // Create new DataSet
mySqlDataAdapter.Fill(DT); // Fill the Dataset with the information gathered above
LastUpdated = DateTime.Now.ToString("yyyyMMddHHmmss"); // Save the time we retrieved the database

foreach (DataRow dr in (dataGridView1.DataSource as DataTable).Rows)
{
    foreach(DataRow DTdr in DT.Rows)
    {
        if (dr["ID"].ToString() != DTdr["ID"].ToString()) continue;

        dr.ItemArray = DTdr.ItemArray;
    }
}
...