У меня есть dataGridView, когда я нажимаю на любую строку, открытую форму для обновления данных строки, но после окончания обновления форма обновления закрывается, но данные dataGridView не обновляются
Как я могу это сделать?
У меня есть dataGridView, когда я нажимаю на любую строку, открытую форму для обновления данных строки, но после окончания обновления форма обновления закрывается, но данные dataGridView не обновляются
Как я могу это сделать?
BindingSource
- единственный способ, не обращаясь к ORM сторонней организации, это может показаться длинным намотчиком сначала, но преимущества одного метода обновления на BindingSource
настолько полезны.
Если ваш источник говорит, например, список пользовательских строк
List<string> users = GetUsers();
BindingSource source = new BindingSource();
source.DataSource = users
dataGridView1.Datasource = source;
то, когда ваше редактирование просто обновит ваш объект данных, будь то DataTable
или список пользовательских строк, как здесь, и ResetBindings
на BindingSource
;
users = GetUsers(); //Update your data object
source.ResetBindings(false);
Верните свой DatagridView в исходный код.
DataGridView dg1 = new DataGridView();
dg1.DataSource = src1;
// Update Data in src1
dg1.DataSource = null;
dg1.DataSource = src1;
Я не знаю, действительно ли это было решено или нет... но, глядя на все другие ответы, ничего не кажется совершенно ясным. Лучший способ, которым я нашел это, - поместить тот же код, который использовался для заполнения вашего datagridview
в методе и передать его вашей форме datagridview
, как это:
public void ConnectAndPopulateDataGridView(DataGridView dataGridView)
{ }
Код внутри метода точно такой же, как и код, используемый для заполнения datagirdview
изначально, за исключением того, что имя datagridview
изменяется на все, что вы вызывали в своем методе.
Теперь этот метод вызывается в вашей родительской форме.
Детский вид запускается через .ShowDialog()
, после чего метод вызывается после того, как он вызывается сразу после того, как дочерний элемент закрыт... так:
ChildForm.ShowDialog();
ConnectAndPopulateDataGridView(dataGridView1);
Вам просто нужно переопределить DataSource. Так что если у вас есть DataGridView DataSource, который содержит a, b, я c:
DataGridView.DataSource = a, b, c
И вдруг вы обновляете DataSource, чтобы иметь только a и b, вам нужно будет переопределить ваш DataSource:
DataGridView.DataSource = a, b
Надеюсь, вы сочтете это полезным.
Спасибо.
Вы можете использовать SqlDataAdapter для обновления DataGridView
using (SqlConnection conn = new SqlConnection(connectionString))
{
using (SqlDataAdapter ad = new SqlDataAdapter("SELECT * FROM Table", conn))
{
DataTable dt = new DataTable();
ad.Fill(dt);
dataGridView1.DataSource = dt;
}
}