我試圖在運行時加載一個帶有值的復選框。但是當我嘗試從中獲取檢查值時。它回傳以下錯誤:
未為字串 '' 和型別 'DataRowView' 定義運算子 '&',
雖然當我在設計時加載選中串列框時它作業正常
Public Sub loadListBox(ByVal lst As CheckedListBox, ByVal sql As String, ByVal fldDsp As String, ByVal fldVal As String)
Try
'open DB Connection
openConn()
Dim lstDS As New DataTable
Dim lstAD As SqlDataAdapter
Dim cboCMD As New SqlCommand(sql, Qconn)
lstAD = New SqlDataAdapter(sql, Qconn)
lstAD.Fill(lstDS)
lst.Items.Clear()
lst.SelectedIndex = -1
With lst
.Items.Clear()
.DataSource = Nothing
.Text = fldDsp
.DataSource = lstDS
.ValueMember = fldVal
.DisplayMember = fldDsp
End With
Catch ex As Exception
msgError("ERROR:Failed Loading Values " ex.Message)
Exit Sub
Finally
closeConn()
End Try
End Sub
---on form load
Dim symp As String = "SELECT distinct facility FROM [eLab].[settings].[Locations]"
frm.chk_locations.Items.Clear()
loadListBox(frm.CheckedListBox1, symp, "facility", "facility")
Public Function getCheckedItems(ByVal chk As CheckedListBox) As String
Dim items As String = ""
If chk.CheckedItems.Count > 0 Then
items = "" & chk.CheckedItems(0) & ""
'check if the checked items are more than 1
If chk.CheckedItems.Count > 1 Then
For i As Integer = 1 To chk.CheckedItems.Count - 1
items = items & "," & chk.CheckedItems(i) & ""
Next
End If
End If
Return items
End Function
Dim configlocation As String = getCheckedItems(frm.CheckedListBox1)
msgBox(configlocation)
我所期待的是位置 A,位置 X(所有選定的位置以逗號分隔
uj5u.com熱心網友回復:
當你將 a 系結DataTable到一個控制元件時,資料來自它DefaultView的 type DataView,它是一個DataRowView物件串列。這意味著控制元件中的每個專案都是一個DataRowView,所以顯然每個選中的專案都是一個DataRowView。如果您真正想要的是為每個專案顯示的文本,那么您需要呼叫GetItemText控制元件的方法。如果您想要的是一個以逗號分隔的字串,其中包含已檢查專案的文本,那么您應該這樣做:
Dim items = String.Join(",",
chk.CheckedItems.
Cast(Of Object)().
Select(Function(item) chk.GetItemText(item)))
它使用 LINQ 獲取已檢查專案的串列,獲取這些專案的文本串列,然后將該串列加入單個逗號分隔String。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/527267.html
標籤:sql服务器VB.net
上一篇:總轉發器頁腳,VB.NET中的itemdatabound
下一篇:將資料從一個表拆分到另一個表
