【问题标题】:Fetching data from database into text boxes将数据库中的数据提取到文本框中
【发布时间】:2020-08-13 18:07:03
【问题描述】:

我设计了一个 SQL Server 数据库应用程序,我从数据库中获取数据,然后插入文本框中。我使用一个函数从数据库中获取数据表中的数据,然后填充文本框。我不得不一次又一次地使用这种编码:

If Dt.Rows.Count > 0 Then
    
    TxtCust_Id.Text = Dt.Rows(0).Item(0)
    TxtCust_City.Text = Dt.Rows(0).Item(1)
    TxtCust_Area.Text = Dt.Rows(0).Item(2)
    
Else
    
    TxtCust_Id.Text = String.Empty
    TxtCust_City.Text = String.Empty
    TxtCust_Area.Text = String.Empty
End if 

文本框名称根据查询表而变化。我的问题是。是否可以使用循环或任何其他方法创建一个函数或过程来从数据表中填充文本框中的数据?提前致谢。

Shared Function ExecuteSelectDt(ByVal SelectCommand As String) As DataTable
    
    Cmd = New SqlClient.SqlCommand
    Sda = New SqlDataAdapter
    ' Dt = New DataTable

    Try
        DBConnection()    ' Database connection details
    
        Sda = New SqlDataAdapter(SelectCommand, Con)
        Dim dt2 As New DataTable
        Sda.Fill(dt2)
        CloseConnection()
        Return dt2
    Catch ex As Exception
        CloseConnection()
        MsgBox(ex.Message)
        Return dt
    End Try
End Function
    
Private Sub TxtCust_Name_Leave(sender As Object, e As EventArgs) Handles TxtCust_Name.Leave
    
    SQuery = "select Cust_Id, Cust_City, Cust_Area from TBLCustommers where Cust_Name= '" & TxtCust_Name.Text & "'"
    
    Dt = Nothing
    Dt = BM_Class_Liberary.SQLSereverDB.ExecuteSelectDt(SQuery)
    
    If Dt.Rows.Count > 0 Then
    
        TxtCust_Id.Text = Dt.Rows(0).Item(0)
        TxtCust_City.Text = Dt.Rows(0).Item(1)
        TxtCust_Area.Text = Dt.Rows(0).Item(2)
    
    Else
    
        TxtCust_Id.Text = String.Empty
        TxtCust_City.Text = String.Empty
        TxtCust_Area.Text = String.Empty
    End if 
    
End Sub

【问题讨论】:

  • 使用数据绑定。您将避免大量代码。
  • 兄弟请解释一下我想向你学习。
  • 在 Google 中搜索数据绑定教程。对于 Windows 窗体,这是要走的路。我还建议您使用 DataSet 设计器并在设计器中创建所有查询。将自动为您创建类型化的 DataAdapter。 DataTables 和 DataRows 也是如此。
  • 非常感谢我忽略了数据绑定。但现在我将阅读并专注于数据绑定。

标签: sql-server vb.net


【解决方案1】:
'create and populate list
dim txtBoxes as new List(of TextBox)();
for each ctrl as Control in Form.Controls
    if ctrl.GetType() Is GetType(TextBox) then txtBoxes.Add(ctrl)
next

' then do this when you get DataTable
dim theRow as DataRow = dt.Rows(0); ' whatever logic you have to getting needed row
for each col as DataColumn in dt.Columns
    ' use system.linq
    txtBoxes.First(function(tb) tb.Name = col.ColumnName).Text = theRow(col.ColumnName).ToString() 
next

注意,当theRow(col.ColumnName)DBNull.Value 时,ToString 将返回string.Empty,这很好,因为.Text 不能有Nothing

另外,我使用了First,因为我这样做的前提是每列都有文本框。

或者,使用字典。更好,我认为

'create and populate dictionary
dim txtBoxes as new Dictionary(of string, TextBox)();
for each ctrl as Control in Form.Controls
    if ctrl.GetType() Is GetType(TextBox) then txtBoxes.Add(ctrl.Name, ctrl)
next

' then do this when you get DataTable
dim theRow as DataRow = dt.Rows(0); ' whatever logic you have to getting needed row
for each col as DataColumn in dt.Columns
    
    txtBoxes(col.ColumnName).Text = theRow(col.ColumnName).ToString() 
next

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多