2016-07-25 75 views
0

我想从数据库(工作)获取checkboxlist。在页面上有两个checkboxlist:第一个在页面加载时获取,第二个从第一个checkboxList获取选定的值。当我从第一个checkboxList中选择第一次时,这也起作用。但是,当我选择第一的CheckBoxList然后字符串被结构化这样获取checkboxList值从每个选定的类别从父级复选框列表

(“值1”,“值2‘& vbLf &’”)

应该使串这样

第二个值

( '值1', '值')

现在我不明白这是什么& vbLf &

Dim joiner As String = "" 
Dim whereClause As String = String.Empty 
Dim categoryCondition As String = String.Empty 

For i = 0 To categoryFilter.Items.Count - 1 
    If categoryFilter.Items(i).Selected Then 
     Dim category As String = categoryFilter.Items(i).ToString 
     categoryCondition = String.Concat(categoryCondition, joiner, String.Format("'{0}'", category)) 
     If joiner = "" Then joiner = "," 
    End If 
Next 
+0

您确定在上面显示的代码中生成了换行字符吗? –

+0

您正试图以非常复杂的方式将物品连接在一起。看看[Enumerable.Aggregate](https://msdn.microsoft.com/en-us/library/bb548651(v = vs.100).aspx) – djv

+0

@AndrewMortimer你是对的我的表格数据行有问题因为我从excel中粘贴了它们,并且在某些行中出现了一些空白行。 – SUN

回答

0

使用内置的功能与LINQ得到检查的项目和字符串连接在一起

  1. 从控制获取的检查项目(categoryFilter.CheckedItems
  2. 将它们转换为字符串(Cast(Of String)()
  3. '分别放在它们周围(Select()
  4. 将它们连同,Aggregate()

代码:

Dim categoryCondition As String = Me.categoryFilter.CheckedItems. 
    Cast(Of String)(). 
    Select(Function(i1) String.Format("'{0}'", i1)). 
    Aggregate(Function(i1, i2) String.Format("{0}, {1}", i1, i2)) 

如果换行仍然存在,这是可能的,它存在于CheckedListBox项目本身。你说这是来自你的数据库,所以也许这是(不工作)。