2013-04-03 4 views
0

Я использую Visual Basic Express 2010. Форма 3 имеет код для импорта CSV-файла в DataGridView при создании DataSet. Это событие происходит, когда я открываю форму 3. Путь к файлу находится в коде. Я хотел бы иметь кнопку в форме 1, которая открывает OpenFileDialog, чтобы пользователь мог просматривать файл csv. Как только пользователь выбирает файл, DataGridView и DataSet в Форме 3 инициируют. Код, который я использую в настоящее время, приведен ниже. Есть ли способ редактировать код, чтобы открыть диалоговое окно открытого файла с помощью кнопки в форме 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 и DataSet по форме 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

Формы просто объекты. Таким образом, все способы передачи информации с одного объекта на другой в вашем распоряжении.

Например, вы можете создать общедоступное свойство FileLocation на Form3, а затем установить его перед тем, как Show Form3. Вместо этого вместо Form.Load вам нужно будет использовать Form.Shown.

Другим вариантом является перегрузка конструктора для Form3 с параметром FileLocation.

+0

Я разместил код в совете № 1 в Форме 1, и у меня нет никаких ошибок, и появится окно openfiledialog. Но я борюсь с советом № 2. Могу ли я помешать вам отправить код, который нужно поместить в форму 1, чтобы передать информацию о местоположении файла в форму 3. Кроме того, вы могли бы опубликовать код, который появится в форме 3. Спасибо заранее. – George

+0

@GeorgeAdis Steve был достаточно любезен, чтобы сделать это уже. Он перегрузил конструктора. Единственное изменение, которое вам нужно сделать, это использовать одну переменную вместо двух, потому что 'OpenFileDialog.FileName' дает вам путь и имя файла, объединенные уже –

+0

Я новичок в программировании, но я, наконец, собрал его вместе.Я могу нажать кнопку на Form1 и openfiledialog, чтобы импортировать csv в Form3 datagridview при создании DataSet. Спасибо и Стив! Последнее наблюдение. Если пользователь закрывает окно Form3, содержащее импортированные данные, может ли пользователь вызвать Form3 datagridview с новой кнопки Form1 с именем View? Если я положу кнопку в Form1 с именем View, могу ли я снова открыть форму 3 и снова просмотреть данные? – George

Смежные вопросы