Обновление
Я решил перебрать Data.DataTable
и обрезал там значения.
Используя сообщение SirDemon , я немного обновил код:
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.