[英]ASP.NET 4.5 How do I use an Ajax controls, I can't find them in the Toolbox?
[英]How do I read contents of a DataTable and assign them to other controls?
早上好,
我一整夜都試圖自己解決這個問題,而不會惹惱別人,但我做不到。
我成功地查詢了我的MySQL數據庫,並將一組記錄添加到DataTable(dbTable)中。 在調試過程中,我可以看到它的內容,所以我知道數據存在。 最初,DataTable用於填充我在表單上的ListView控件。
當我選擇一條記錄時,我希望將DataTable(或我剛剛運行的查詢)的內容分配給某些TextBox控件。 我似乎無法弄清楚如何做到這一點。 任何幫助將不勝感激。
更新添加圖片:我希望這些屏幕截圖能夠讓我了解我的目標。 第一張圖顯示了輸入帳號后發生的情況。 第二個框顯示擴展的Groupbox,以在ListView中選擇記錄后顯示表單字段。
控件名稱為: TextBoxCustomer,TextBoxLastName,TextBoxFirstName,ComboBoxSalutation,ComboBoxCardType,TextBoxCard.Text,TextBoxExpireMonth,TextBoxExpireYear,TextBoxCVV2。
DataTable(dbTable)中的字段名稱是: nameCOMPANY,nameLAST,nameFIRST,nameSALUTATION,ccType,ccNumber,ccExpireMonth,ccExpireYear,ccCode。
圖片1:
圖片2:
你試過這個嗎?
TextBox1.Text = dbTable.Rows(0)("ColumnName").ToString()
TextBox2.Text = dbTable.Rows(1)("OtherColumnName").ToString()
你也可以這樣做:
Dim row as DataRow = dbTable.Rows(0)
TextBox1.Text = row("ColumnName").ToString()
row = dbTable.Rows(1)
TextBox2.Text = row("OtherColumnName").ToString()
您還可以使用dbTable
作為DataSource
將DataBind
dbTable
DataGrid
(或類似控件),然后將DataGrid.EditMode
設置為True
。 這將為您創建文本框控件。
更新:
嘗試這樣的方法將文本框綁定到ListView的選定值:
Private Sub ListView1_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles ListView1.SelectedIndexChanged
Dim item As ListViewItem = Nothing
Dim tb As TextBox = Nothing
Dim i As Integer = 0
For Each item In ListView1.SelectedItems
tb = Me.Controls.Find("TextBox" & i.ToString, True)(0)
If tb IsNot Nothing Then
tb.Text = item.Text
End If
i += 1
Next
End Sub
更新:
這是一個更加防錯,但只有當您的文本框命名為TextBox1
, TextBox2
, TextBox3
等時,此例程才有效:
Private Sub ListView1_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles ListView1.SelectedIndexChanged
Dim item As ListViewItem = Nothing
Dim found() As Control = Nothing
Dim tb As TextBox = Nothing
Dim i As Integer = 0
For Each item In ListView1.SelectedItems
found = Me.Controls.Find("TextBox" & i.ToString, True)
If found.Length > 0 Then
tb = TryCast(found(0), TextBox)
Else
tb = Nothing
End If
If tb IsNot Nothing Then
tb.Text = item.Text
End If
i += 1
Next
End Sub
更新:
好的,由於屏幕截圖,我假設您的ListView.MultiSelect = False
,因此一次只能選擇一個項目。 鑒於此,只要正確命名了文本框和ListView列,以下內容就可以正常工作:
Private Sub ListView1_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles ListView1.SelectedIndexChanged
Dim item As ListViewItem = Nothing
If ListView1.SelectedItems.Count = 1 Then
item = ListView1.SelectedItems(0)
txtCardNumber.Text = item.SubItems("CARD NUMBER")
txtCardExpirationMonth.Text = item.SubItems("EXP MO")
txtCardExpirationYear.Text = item.SubItems("EXP YEAR")
End If
End Sub
大家好/ gals,
在Pete的大力幫助下,我能夠修改建議的答案,並獲得了理想的解決方案。 為了防止顯示水平滾動條,我沒有向Listview添加列(來自Designer)。 相反,我以編程方式將字段添加到Listview中 - 這樣它們可供選擇。
我遇到的主要問題是弄清楚字段的索引號。 我不得不多次調試以確定數字是什么 - 所以如果有人知道更好的方法請分享。
這是我使用的兩個代碼(感謝Pete):
Private Sub loadCard()
Try
'FOR MySQL DATABASE USE
Dim dbQuery As String = ""
Dim dbCmd As New MySqlCommand
Dim dbAdapter As New MySqlDataAdapter
Dim dbTable As New DataTable
Dim i As Integer
If dbConn.State = ConnectionState.Closed Then
dbConn.ConnectionString = String.Format("Server={0};Port={1};Uid={2};Password={3};Database=accounting", FormLogin.ComboBoxServerIP.SelectedItem, My.Settings.DB_Port, My.Settings.DB_UserID, My.Settings.DB_Password)
dbConn.Open()
End If
dbQuery = "SELECT *" & _
"FROM cc_master INNER JOIN customer ON customer.accountNumber = cc_master.customer_accountNumber " & _
"WHERE customer.accountNumber = '" & TextBoxAccount.Text & "'"
With dbCmd
.CommandText = dbQuery
.Connection = dbConn
End With
With dbAdapter
.SelectCommand = dbCmd
.Fill(dbTable)
End With
ListViewCard.Items.Clear()
For i = 0 To dbTable.Rows.Count - 1
With ListViewCard
.Items.Add(dbTable.Rows(i)("ccID"))
With .Items(.Items.Count - 1).SubItems
.Add(dbTable.Rows(i)("ccNumber"))
.Add(dbTable.Rows(i)("ccExpireMonth"))
.Add(dbTable.Rows(i)("ccExpireYear"))
.Add(dbTable.Rows(i)("ccCode"))
.Add(dbTable.Rows(i)("ccType"))
.Add(dbTable.Rows(i)("ccAuthorizedUseStart"))
.Add(dbTable.Rows(i)("ccAuthorizedUseEnd"))
.Add(dbTable.Rows(i)("nameCOMPANY"))
.Add(dbTable.Rows(i)("nameSALUTATION"))
.Add(dbTable.Rows(i)("nameLAST"))
.Add(dbTable.Rows(i)("nameFIRST"))
End With
End With
Next
If dbTable.Rows.Count = 0 Then
LabelNoCard.Visible = True
LabelNoCard.Focus()
TextBoxAccount.Focus()
Me.Refresh()
Else
If dbTable.Rows.Count > 1 Then
LabelNoCard.Visible = False
LabelMultipleCards.Visible = True
ListViewCard.Visible = True
Me.Refresh()
End If
End If
Catch ex As MySqlException
MessageBox.Show("A DATABASE ERROR HAS OCCURED" & vbCrLf & vbCrLf & ex.Message & vbCrLf & _
vbCrLf + "Please report this to the IT/Systems Helpdesk at Ext 131.")
End Try
dbConn.Close()
End Sub
這是第二個:
Private Sub ListViewCard_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListViewCard.SelectedIndexChanged
GroupBox2.Visible = True
Dim item As ListViewItem = Nothing
If ListViewCard.SelectedItems.Count = 1 Then
item = ListViewCard.SelectedItems(0)
TextBoxCustomer.Text = item.SubItems(8).Text
TextBoxLastName.Text = item.SubItems(10).Text
TextBoxFirstName.Text = item.SubItems(11).Text
ComboBoxSalutation.Text = item.SubItems(9).Text
ComboBoxCardType.Text = item.SubItems(5).Text
TextBoxCard.Text = item.SubItems(1).Text
TextBoxExpireMonth.Text = item.SubItems(2).Text
TextBoxExpireYear.Text = item.SubItems(3).Text
TextBoxCVV2.Text = item.SubItems(4).Text
DateTimePickerStartDate.Text = item.SubItems(6).Text
DateTimePickerEndDate.Text = item.SubItems(7).Text
End If
End Sub
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.