Я создал DataGridView и сгенерировал один из столбцов с помощью следующего кода:
DataTable accessDT = SQL.GetDT(@"select * from [Access]"); //Custom-made method to get the DataTable.
DataGridViewComboBoxColumn dcAccess = new DataGridViewComboBoxColumn();
dcAccess.Name = "Access";
dcAccess.HeaderText = "權限";
dcAccess.DataSource = accessDT;
dcAccess.ValueMember = "ID";
dcAccess.DisplayMember = "Name";
dgvUser.Columns.Add(dcAccess);
Он заполнит столбец «Доступ» dtAccess, это не проблема.
Но я не знаю, как сделать так, чтобы он автоматически обновлялся при любом изменении таблицы [Доступ].
Я попытался снова получить DataTable и выполнить Update() и Refresh(), но столбец «Доступ» по-прежнему содержит старые данные.
И я не могу найти DataSource под dgvUser.Columns["Access"] после его создания.
Может кто-нибудь, пожалуйста, будьте так любезны и научите меня, как правильно настроить автоматическое обновление?
Очень признателен!





Я предполагаю, что ваш метод GetDT выглядит примерно так:
public DataTable GetDT(string sql){
var dt = new DataTable();
using(x as new OleDbDataAdapter(sql, connectionstring))
x.Fill(dt);
return dt;
}
Если это не так, то должно - адаптеры данных знают, как создавать и открывать соединения и т. д., поэтому эти 4 строки - действительно все, что вам нужно для создания таблицы данных, ее заполнения и возврата.
В любом случае.. Измените или добавьте другой метод, например:
public void FillDT(string sql, DataTable dt){
dt.Clear();
using(x as new OleDbDataAdapter(sql, connectionstring))
x.Fill(dt);
}
Затем используйте его для периодического пополнения вашего dt, который является источником данных для столбца:
var dt = (dgvUser.Columns["Access"] as DataGridViewComboBoxColumn).DataSource as DataTable;
FillDT("SELECT...", dt);
вы можете решить его периодически запуская
SQL.GetDT(@"select * from [Access]")(или по какому-либо сигналу из внешнего приложения/sql). stackoverflow.com/q/39315732/940182