Как обновить Datagridview в vb.net

#.net #vb.net

#.net #vb.net

Вопрос:

В моем VB.net приложение win form, когда я нажимаю кнопку Загрузки, я отображаю имя файла из папки в Datagridview. Затем, после того, как я нажму на кнопку Process, файл будет перемещен в другую папку. После перемещения файла необходимо обновить сетку.

Вот код, который я написал. Я могу переместить файл, но не обновлять сетку.Пожалуйста, любые предложения?

  Public Class Form1
 Private Sub Load_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles Load.Click

    With DataGridView1
        .Columns.Add("Column 0", "TaskName")
        .AutoResizeColumns()
    End With

    Dim rowint As Integer = 0

    'Dim directoryInfo As New System.IO.DirectoryInfo("C:UsersDesktopauto")
    'Dim fileInfo = System.IO.Directory.GetFiles(directoryInfo.ToString)
    'Dim name As String

    DataGridView1.Rows.Add()
    Dim filename As String = System.IO.Path.GetFileName("C:UsersRamDesktopautoINQUEUE123.txt")
    DataGridView1.Item(0, rowint).Value = filename
    rowint = rowint   1

End Sub

Private Sub Process_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Process.Click
    System.IO.File.Move("C:UsersRamDesktopautoINQUEUE123.txt", "C:UsersRamDesktopDemoabc.txt")
    System.IO.File.Delete("C:UsersRamDesktopautoINQUEUE123.txt")
    DataGridView1.Refresh()
End Sub
  

Завершить класс

Ответ №1:

Поскольку вы ни к чему не привязываетесь, было бы лучше просто изменить значение строки в таблице.

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

 Private Sub Process_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Process.Click    
    System.IO.File.Move("C:UsersRamDesktopautoINQUEUE123.txt", "C:UsersRamDesktopDemoabc.txt")    
    System.IO.File.Delete("C:UsersRamDesktopautoINQUEUE123.txt")    
    DataGridView1.Rows(0).Cells(0) = "C:UsersRamDesktopautoINQUEUE123.txt"    
End Sub
  

Ответ №2:

Refresh() Метод только снова перерисовывает существующую сетку на экран. Вам нужно будет перезагрузить данные сетки, выполнив «щелчок». Это можно сделать, вызвав событие напрямую или с помощью PerformClick() метода.

 Private Sub Process_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Process.Click
    System.IO.File.Move("C:UsersRamDesktopautoINQUEUE123.txt", "C:UsersRamDesktopDemoabc.txt")
    System.IO.File.Delete("C:UsersRamDesktopautoINQUEUE123.txt")
    Load_Click(Load, Nothing)
    DataGridView1.Refresh()
End Sub
  

—- или —-

 Private Sub Process_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Process.Click
    System.IO.File.Move("C:UsersRamDesktopautoINQUEUE123.txt", "C:UsersRamDesktopDemoabc.txt")
    System.IO.File.Delete("C:UsersRamDesktopautoINQUEUE123.txt")
    Load.PerformClick()
    DataGridView1.Refresh()
End Sub
  

Комментарии:

1. Это не будет работать в качестве нагрузки. performClick просмотрит старое поле?

2. @TBohnen.jnr: Возможно, но, поскольку я смотрю на это, я бы сказал, что логику для этого события, вероятно, следует извлечь в любом случае, чтобы включить необходимый тип повторной привязки. Однако суть остается в силе, Refresh() только перерисовывается. Если он хочет повторно отобразить данные сетки, ему нужно будет вызвать метод, который повторно привязывает сетку.

3. Согласен, было бы лучше сделать это через привязку

4. performClick не работает. Кто-нибудь нашел рабочее решение для обновления DataGrid после изменения данных источника данных без ручного нажатия?

Ответ №3:

  • создайте вспомогательную сетку по умолчанию()
  • вызывайте его после любого обновления
  • это перезагрузит вашу сетку

Ответ №4:

Вам понадобится событие, например, нажатие кнопки. Чтобы упростить это, в событии кнопки сделайте datagridview = yourtableAdptor.getdata(); Это позволит поддерживать представление в актуальном состоянии до тех пор, пока инструкции insert находятся перед примером кода getdata.

Например:

 private void button1_Click(object sender, EventArgs e)
{
    decimal pay = Convert.ToDecimal(textBox1.Text);
    string comment = textBox2.Text;

    payTableAdapter.Insert(dateTimePicker1.Value, pay, comment);

    payDataGridView.DataSource = payTableAdapter.GetData();

    textBox1.Clear();
    textBox2.Clear();
}