Я изучаю VB.NET, поэтому, пожалуйста, прости мое невежество ...
Я использую форму dataGridView для отображения файла Excel (.xls) в виде файла справки.Я использую формат Excel, потому что он очень хорошо форматирует, может обновляться в Excel и отлично выглядит в форме dataGridView ... намного проще и лучше, чем стандартный текстовый файл.
Но даже при том, что я могу получить доступ к файлус диска («C: \ DTC.XLS»), я хочу поместить файл в само приложение VB как ресурс. Я не смог сделать это успешно. Я перетащил файл в Solution Explorer> My Project>Ресурсы. Он отображается как «DTC» в файлах.
В моем коде, если я заменю путь к файлу ('C: \ DTC.XLS') на дескриптор ресурса (My.Resources.DTC),Я получаю исключение: «System.Data.OleDb.OleDbException:« Невозможно обновить. База данных или объект только для чтения »."
Я в порядке с« только для чтения »... это просто файл справки. Как я могу получить форму dataGridView, чтобы открыть этот ресурс без исключения?
Моя процедура:
Private Sub DTCinfo(sender As Object, e As EventArgs) Handles DTCdataGridView_button.Click
If DTCdataGridView_button.Text = "CLOSE Info" Then
DataGridView1.Hide()
DTCdataGridView_button.Text = "DTC Info"
DTCdataGridView_button.BackColor = SystemColors.ControlDarkDark
Else
DTCdataGridView_button.Text = "CLOSE Info"
DTCdataGridView_button.BackColor = Color.Red
Dim MyConnection As System.Data.OleDb.OleDbConnection
Dim DtSet As System.Data.DataSet
Dim MyCommand As System.Data.OleDb.OleDbDataAdapter
' ***** THE FOLLOWING LINE WORKS OK WITH THIS SUBROUTINE:
' MyConnection = New System.Data.OleDb.OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0;Data Source='c:\DTC.xls';Extended Properties=Excel 8.0;")
' ***** THE FOLLOWING LINE DOES NOT WORK WITH THIS SUBROUTINE (GENERATES AN EXCEPTION):
MyConnection = New System.Data.OleDb.OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0;Data Source=My.Resources.DTC;Extended Properties=Excel 8.0;")
MyCommand = New System.Data.OleDb.OleDbDataAdapter("select * from [Sheet1$]", MyConnection)
MyCommand.TableMappings.Add("Table", "Net-informations.com")
DtSet = New System.Data.DataSet
MyCommand.Fill(DtSet)
DataGridView1.DataSource = DtSet.Tables(0)
DataGridView1.ReadOnly = True
DataGridView1.DefaultCellStyle.WrapMode = DataGridViewTriState.[True]
AutoSizeColumnsMode = True
AutoSizeRowsMode = True
DataGridView1.Columns(0).AutoSizeMode = False
DataGridView1.Columns(0).Width = 50
DataGridView1.Columns(2).Width = 200
DataGridView1.Columns(3).Width = 150
DataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells
With DataGridView1
.RowHeadersVisible = False
.Columns(0).HeaderText = "DTC"
.Columns(1).HeaderText = "Test Mode"
.Columns(2).HeaderText = "Description"
.Columns(3).HeaderText = "Action"
End With
MyConnection.Close()
DataGridView1.Show()
End If
End Sub
Я нашел другой пример того, как сделать это в Интернете. Его проще читать и легче понимать, но я все еще получаю то же исключение: «Не удается обновить: база данных или объект доступны только для чтения». Какисправить?
' here's another test....
Sub testDataGridView()
Dim dt As New DataTable
' Note, you should use My.Settings rather than My.Resources for storing the data source
' Dim connectionString As String =
' $"provider=Microsoft.Jet.OLEDB.4.0;Data Source={My.Settings.gizmotest};Extended Properties=Excel 8.0;"
Dim connectionString As String =
$"provider=Microsoft.Jet.OLEDB.4.0;Data Source={My.Resources.DTC};Extended Properties=Excel 8.0;"
' Note, you should use import statements for these objects e.g.
' Place this as the first line in the code file
' Imports System.Data.OleDb
Using cn As New OleDbConnection With {.connectionString = connectionString}
Using cmd As New OleDbCommand With {.Connection = cn, .CommandText = "select * from [Sheet1$]"}
Try
cn.Open()
dt.Load(cmd.ExecuteReader)
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Using
End Using
End Sub