【发布时间】:2015-09-24 17:40:47
【问题描述】:
我有一些代码用数据库名称填充组合框。然后我有一个按钮,可以将名称保存回 My.Settings 并创建连接字符串。
这在很大程度上是有效的。如果我选择一个数据库,它将在我的表单中显示该数据库的正确信息,然后如果我返回到我的数据库选择器并执行相同操作,它仍将显示正确的设置。
问题是,我有一个重新加载数据网格视图子,它重新填充网格。如果我选择一个数据库,然后退出并选择另一个数据库,然后运行重新加载子程序,它将从另一个数据库中提取设置。即使它最初启动时表单中的数据库信息也是正确的。
我已经尝试过 My.Settings.Reset 和 My.Settings.Save 无济于事。
这是一段代码:
Dim strDatabase As String = My.Settings.Database
Dim strDatabaseCon As String = My.Settings.DatabaseCon
Public Sub Loadcombobox()
My.Settings.Reset()
My.Settings.Save()
Try
Dim con As New SqlConnection(" Data Source=******\SQLEXPRESS; Initial Catalog =" & strDatabase & "; Integrated Security=true")
con.Open()
Dim cmd As New SqlCommand("Select * From sys.databases Where database_id > 4", con)
Dim read As SqlDataReader = cmd.ExecuteReader()
While read.Read()
ComboBox1.Items.Add(read.Item(0))
End While
con.Close()
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
If ComboBox1.Text = "" Then
MessageBox.Show("Please select a customer")
Else
My.Settings.Database = ComboBox1.Text
strDatabase = My.Settings.Database
My.Settings.DatabaseCon = "Data Source=******\SQLEXPRESS; Initial Catalog =" & strDatabase & "; Integrated Security=true"
'Here we redeclare the strDatabaseCon = My.Settings.DatabaseCon
strDatabaseCon = My.Settings.DatabaseCon
My.Settings.Save()
Mainform.Show()
Me.Hide()
End If
End Sub
此子在不同的表单上,并导致 datagridview 从第一个数据库中填充。
Sub ReloadRecords()
Try
FillDataGrid("SELECT * FROM Change_Control order by [DateOfChange] desc", dgvData)
dgvData.Columns(0).Visible = False
dgvData.Columns(1).Width = 200 ''Date of Change''
dgvData.Columns(1).HeaderCell.Value = "Date Of Change"
dgvData.Columns(2).Width = 200 ''Name''
dgvData.Columns(2).HeaderCell.Value = "Who Made the Change"
dgvData.Columns(3).Width = 470 ''Change made''
dgvData.Columns(3).HeaderCell.Value = "Change Made"
dgvData.Columns(4).Visible = False
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Critical, Me.Text)
End Try
End Sub
这是 FillDataGrid 函数
Dim strDatabaseCon As String = My.Settings.DatabaseCon
Public Function FillDataGrid(ByVal Sqlstring As String, ByVal MyDataGrid As DataGridView)
Dim SQLCon As New SQLConnection(strDatabaseCon)
Dim SQLAdapter As New SqlDataAdapter()
Dim myDataset As New DataSet()
SQLCon.Open()
Try
SQLAdapter.SelectCommand = New SqlCommand(Sqlstring, SQLCon)
SQLAdapter.Fill(myDataset)
MyDataGrid.DataSource = myDataset.Tables(0)
Catch ex As Exception
End Try
SQLCon.Close()
SQLAdapter.Dispose()
myDataset.Dispose()
Return True
End Function
【问题讨论】:
-
我很难理解您的问题。我们可能需要查看组合的选定索引更改事件,也可能需要查看 FillDataGrid。提示:使用 SqlConnectionStringBuilder 来防止错误和安全问题。
-
嗨@Crowcoder 我没有选定的索引更改事件,它只是从
My.Settings.Database = ComboBox1.Text中提取它我需要更改选定的索引吗? FillDataGrid函数见原文
标签: sql-server vb.net combobox