2011-06-06 82 views
2

在我的VB.net胜利表单应用程序中,当我单击加载按钮时,我正在将文件名从文件夹显示到Datagridview。然后,我点击处理按钮后,文件将被移动到另一个文件夹。文件移动后,网格必须刷新。如何刷新vb.net中的Datagridview

这是我写的代码。我可以移动文件但不刷新Grid.Any建议请?

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:\Users\Desktop\auto") 
    'Dim fileInfo = System.IO.Directory.GetFiles(directoryInfo.ToString) 
    'Dim name As String 

    DataGridView1.Rows.Add() 
    Dim filename As String = System.IO.Path.GetFileName("C:\Users\Ram\Desktop\auto\INQUEUE\123.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:\Users\Ram\Desktop\auto\INQUEUE\123.txt", "C:\Users\Ram\Desktop\Demo\abc.txt") 
    System.IO.File.Delete("C:\Users\Ram\Desktop\auto\INQUEUE\123.txt") 
    DataGridView1.Refresh() 
End Sub 

末级

回答

3

Refresh()方法只会将现有网格重新绘制到屏幕上。您需要通过执行“点击”来重新加载网格的数据。这可以通过直接调用事件或使用PerformClick()方法来完成。

Private Sub Process_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Process.Click 
    System.IO.File.Move("C:\Users\Ram\Desktop\auto\INQUEUE\123.txt", "C:\Users\Ram\Desktop\Demo\abc.txt") 
    System.IO.File.Delete("C:\Users\Ram\Desktop\auto\INQUEUE\123.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:\Users\Ram\Desktop\auto\INQUEUE\123.txt", "C:\Users\Ram\Desktop\Demo\abc.txt") 
    System.IO.File.Delete("C:\Users\Ram\Desktop\auto\INQUEUE\123.txt") 
    Load.PerformClick() 
    DataGridView1.Refresh() 
End Sub 
+0

这将无法正常工作的load.PerformClick会看老场? – 2011-06-06 10:36:18

+0

@ TBohnen.jnr:可能,但正如我在看它,我会说这个事件的逻辑可能应该被提取出来,以启用必要的重新绑定类型。这个观点表明,'Refresh()'只能重绘。如果他想重新显示网格数据,他需要调用重新绑定网格的方法。 – 2011-06-06 10:38:48

+0

同意,最好通过绑定来实现 – 2011-06-06 10:40:54

3

因为你不具约束力的话,这将是最好的只是改变在网格中的行的值。

更好的选择是创建一个List,然后将数据源设置为该数据源,并且当您更新列表项以反映新字符串时,可以刷新网格并且它应该可以工作。

Private Sub Process_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Process.Click  
    System.IO.File.Move("C:\Users\Ram\Desktop\auto\INQUEUE\123.txt", "C:\Users\Ram\Desktop\Demo\abc.txt")  
    System.IO.File.Delete("C:\Users\Ram\Desktop\auto\INQUEUE\123.txt")  
    DataGridView1.Rows(0).Cells(0) = "C:\Users\Ram\Desktop\auto\INQUEUE\123.txt"  
End Sub 
0
  • 使默认子fillgrid()
  • 叫它任何更新
  • 后重装网格
0

您将需要一个事件,例如点击按钮。为了在按钮事件中保持这种简单性,请使用datagridview = yourtableAdptor.getdata();只要插入语句位于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(); 
}