【发布时间】:2009-04-07 15:02:08
【问题描述】:
更新
我决定遍历 Data.DataTable 并修剪那里的值。
利用SirDemon's的帖子,我稍微更新了代码:
Sub test(ByVal path As String)
Dim oData As GSDataObject = GetDataObj(path)
EmptyComboBoxes()
Dim oDT As New Data.DataTable
Try
Dim t = From r In oData.GetTable(String.Format("SELECT * FROM {0}gsobj\paths ORDER BY keyid", AddBS(path))) Select r
If t.Count > 0 Then
oDT = t.CopyToDataTable
For Each dr As Data.DataRow In oDT.Rows
dr.Item("key_code") = dr.Item("key_code").ToString.Trim
dr.Item("descript") = dr.Item("descript").ToString.Trim
Next
dataPathComboBox.DataSource = oDT
dataPathComboBox.DisplayMember = "descript"
dataPathComboBox.ValueMember = "key_code"
dataPathComboBox.SelectedIndex = 0
dataPathComboBox.Enabled = True
End If
Catch ex As Exception
End Try
End Sub
这几乎可以按照我的需要工作,数据最初来自 foxpro 表,因此它返回的字符串是 <value> 加上 (<Field>.maxlength-<value>.length) 尾随空白字符。例如,长度为 12 个字符的字段的值为 bob。当我查询数据库时,我得到“bob_________”,其中 _ 是一个空格。
我尝试了几种不同的方法来消除空格,例如:
dataPathComboBox.DisplayMember.Trim()dataPathComboBox.DisplayMember = "descript".Trim.
但是还没有任何效果。除了遍历Data.DataTable 或创建自定义CopyToDataTable 方法之外,还有什么方法可以修剪这些值吗?也许它可以与 LINQ 查询一起完成?
这是我到目前为止的代码,查询数据库和获取信息没有问题,但我不知道如何在 ComboBox 列表中显示正确的文本。我总是得到System.Data.DataRow:
Try
Dim t = From r In oData.GetTable("SELECT * FROM ../gsobj/paths ORDER BY keyid") _
Select r
dataPathComboBox.DataSource = t.ToList
dataPathComboBox.SelectedIndex = 0
'dataPathComboBox.DisplayMember = t.ToList.First.Item("descript")
dataPathComboBox.Enabled = True
Catch ex As Exception
Stop
End Try
我知道在 DisplayMember 行上 .First.Item() 部分是错误的,我只是想显示我试图指定为 DisplayMember 的行。
【问题讨论】: