2011-06-06 46 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(); 
}