2013-04-03 58 views
0

我正在使用Visual Basic Express 2010.表3有代码在创建DataSet时将csv文件导入DataGridView。当我打开表单3时发生此事件。文件的路径位于代码中。我想在Form 1上有一个打开OpenFileDialog的按钮,这样用户就可以浏览csv文件。用户选择文件后,将启动Form 3上的DataGridView和DataSet。我目前使用的代码如下。有没有办法编辑代码以从Form 1上的按钮打开文件对话框,而不是通过路径自动加载?任何援助将不胜感激。OleDb通过Visual Basic Express 2010中的打开文件对话框

Public Class Form3 

    Private Sub Form3_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load 

     Dim file As String = "test.csv" 
     Dim path As String = "C:\Users\laptop\Desktop\" 
     Dim ds As New DataSet 

     End If 

     Try 
      If IO.File.Exists(IO.Path.Combine(path, file)) Then 
       Dim ConStr As String = _ 
       "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _ 
       path & ";Extended Properties=""Text;HDR=Yes;IMEX=1;FMT=CSVDelimited\""" 
       Dim conn As New OleDb.OleDbConnection(ConStr) 
       Dim da As New OleDb.OleDbDataAdapter("Select * from " & _ 
       file, conn) 
       da.Fill(ds, "TextFile") 

      End If 

     Catch ex As Exception 
      MessageBox.Show(ex.ToString) 

     End Try 

     DataGridView1.DataSource = ds.Tables(0) 

    End Sub 
+0

那么是使用OpenFileDialog的问题还是将路径传递给Form3的问题? –

+0

我希望得到这两个问题的建议。 – George

回答

1

更改您的Form3类添加几个全局变量并强制Form3的调用方传递初始化值。然后使用在连接的断开传递的值

Public Class Form3 
    Dim mFileCSV As String 
    Dim mPathCSV As String 

    Public Sub New(ByVal fileCSV as String, ByVal pathCSV as String) 
     mFileCSV = fileCSV 
     mPathCSV = pathCSV 
    End Sub 

    Private Sub Form3_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load 
     Dim fullPath = Path.Combine(mPathCSV, mFileCSV) 
     if File.Exist(fullPath) then 
      .... open the connection .... 


    End Sub 
这些变化你的Form1中后

时需要打开Form3将调用

Dim of = new OpenFileDialog() 
    if of.ShowDialog() = DialogResult.OK Then 

     .... extract file and path and pass to form3 constructor 

     Dim f3 As Form3 = New Form3(file, path) 
     f3.Show() 
+0

一个小调。 'OpenFileDialog.FileName'为您提供了路径和文件名,所以不需要将它们分开以便重新组合它们。 –

+0

是的,绝对正确,没有提到不会分散主要观点。 – Steve

0

我想对表1的按钮打开OpenFileDialog ,以便用户可以浏览csv文件。一旦用户选择了 文件,在DataGridView和数据集上表3发起

为了解决这个问题,你需要做两件事情

1.使用一个OpenFileDialog

这是简单。只需使用OpenFileDialog以下代码段改编自MSDN示例打开文件对话框,如果

Dim openFileDialog1 As New OpenFileDialog() 
Dim fileLocation As String 
openFileDialog1.InitialDirectory = "c:\" 
openFileDialog1.Filter = "txt files (*.csv)|*.csv|All files (*.*)|*.*" 
openFileDialog1.FilterIndex = 1 
openFileDialog1.RestoreDirectory = True 

If openFileDialog1.ShowDialog() = System.Windows.Forms.DialogResult.OK Then 

    fileLocation = openFileDialog1.FileName 

End If 

2.将fileLocation到Form3

形式都只是对象。因此,您将信息从一个物体传递到另一个物体的所有方式都在您掌握之中。

例如,您可以在Form3上创建一个公共属性FileLocation,然后在显示Form3之前将其设置。而不是使用Form.Load,您需要使用Form.Shown

另一种选择是重载具有FileLocation参数的Form3的构造函数。

+0

我将表单1中的代码放在了建议#1中,我没有任何错误,并且出现了openfiledialog框。但我正在与劝告#2斗争。我可以麻烦你请张贴需要放置在表单1中的代码以将文件位置信息传递给表单3.此外,您可以发布将出现在表单3上的代码。预先感谢您。 – George

+0

@GeorgeAdis史蒂夫很善良,已经做到了。他去了一个重载的构造函数。你必须做的唯一改变是使用一个变量而不是两个,因为'OpenFileDialog.FileName'给你的路径和文件名已经合并了 –

+0

我是编程新手,但我终于拼凑起来了。我可以在Form1和Openfiledialog上单击按钮,以便在建立DataSet时将csv导入到Form3 datagridview中。谢谢你和史蒂夫!最后的后续行动。如果用户关闭包含导入数据的Form3窗口,用户是否可以从名为View的新Form1 Button中调用Form3 datagridview?如果我在Form1上放置一个名为View的按钮,我可以重新打开Form3并再次查看数据吗? – George

相关问题