#.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();
}