Как я могу обновить c # dataGridView после обновления? - PullRequest
22 голосов
/ 10 августа 2011

У меня есть dataGridView, когда я щелкаю по любой строке, открывается форма для обновления данных строки, но после завершения обновлений форма обновления закрывается, но данные dataGridView не обновляются

Как я могу это сделать?

Ответы [ 6 ]

36 голосов
/ 16 августа 2011

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);
31 голосов
/ 10 августа 2011

Перепривязать ваш DatagridView к источнику.

DataGridView dg1 = new DataGridView();
dg1.DataSource = src1;

// Update Data in src1

dg1.DataSource = null;
dg1.DataSource = src1;
0 голосов
/ 23 ноября 2018

Вы можете использовать метод обновления DataGridView. Но ... во многих случаях вам нужно обновить DataGridView из методов, работающих в потоке, отличном от того, в котором работает DataGridView. Для этого вы должны реализовать следующий метод и вызвать его, а не напрямую набирать DataGridView.Refresh ():

    private void RefreshGridView()
    {
        if (dataGridView1.InvokeRequired)
        {
            dataGridView1.Invoke((MethodInvoker)delegate ()
            {
                RefreshGridView();
            });
        }
        else
            dataGridView1.Refresh();
    }  
0 голосов
/ 01 апреля 2016

Вы можете использовать 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;
            }
        }
0 голосов
/ 24 марта 2016

Я не знаю, было ли это действительно решено или нет ... но, глядя на все остальные ответы, ничего не кажется вполне ясным.Лучший способ, который я нашел, - это поместить тот же код, который использовался для заполнения вашего datagridview в метод, и передать ему datagridview вашей формы, например:

public void ConnectAndPopulateDataGridView(DataGridView dataGridView)
{ }

Кодвнутри метода он точно такой же, как и код, используемый для заполнения datagirdview первоначально, за исключением того, что имя datagridview меняется на то, что вы называли в своем методе.

Теперь этот метод вызывается у вашего родителяform.

Дочерняя форма запускается через .ShowDialog(), затем вызывается метод после, так что он вызывается сразу после закрытия дочернего элемента для ... как:

ChildForm.ShowDialog();

ConnectAndPopulateDataGridView(dataGridView1);
0 голосов
/ 16 декабря 2014

Вам просто нужно переопределить DataSource .Поэтому, если у вас есть, например, DataSrid DataGridView, который содержит a, b, ic:

DataGridView.DataSource = a, b, c

И вдруг вы обновите DataSource, чтобы у вас были только a и b, вам потребуется переопределить ваш DataSource:

DataGridView.DataSource = a, b

Надеюсь, вы найдете это полезным.

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...