0

这可能很容易,但我遇到了问题。

这是sql位:

Dim strSQL As String = ("SELECT field1 FROM myTable WHERE key like '%' + strkey + '%'")


    While oReader.Read()
        With oReader
            Dim li As New ListItem(oReader(0).ToString())
            fday.Items.Add(li)

        End With 'end With
    End While 'End While

然后在标记页面上,我有这个:

   <asp:CheckBoxList runat="server" ID="fday" style="text-align:center;cursor:pointer;color:blue;text-decoration:underline;" CssClass="checkAll"> 
   </asp:CheckBoxList>

这工作正常。

但是,我们被要求添加更多字段,因此我们在标记页面上有额外的控件。

例如:

  <table>
   <tr>
    <td>
           <asp:CheckBoxList runat="server" ID="fday" style="text-align:center;cursor:pointer;color:blue;text-decoration:underline;" CssClass="checkAll"> 
   </asp:CheckBoxList>
   </td>
   <td><asp:TextBox id="tb3" runat="server" /></td>
  </tr>
 </table>

这样,我们可以通过向查询中添加更多列来获得更多列数据,例如从 mytable 中选择 field1、field2 等

如何修改 WHILE 循环以在我的查询中包含其他列?

希望我的解释清楚。

非常感谢

4

1 回答 1

0

请记住,我对您的其他代码的外观一无所知,这是我对示例的最佳猜测。

Dim strSQL As String = ("SELECT * FROM myTable WHERE key like '%' + strkey + '%'")

Dim i as integer
i = 0

While oReader.Read()
    With oReader
        while true
            Dim li As New ListItem(oReader(i).ToString())
            if (li is Nothing)//isNull check
                break
            else
                fday.Items.Add(li)
        End While 
    End With 
End While 

还有 2 件事要记住。我主要是一名 C# 程序员,所以如果这看起来很奇怪或使用了在 VB 中具有不同等价物的东西,请自行翻译。另一个,我不确定 oReader 是什么,或者如果i超出范围会产生什么样的行为。这段代码很可能会读入所有列,然后生成 IndexOutOfRangeException。

----

如果您确切知道会有多少列,那么使用具有严格界限的 for 循环比使用 while 循环更好。 for i = 0; i < X; i++其中 X 是您实际拥有的列数。

----

现在,我们遇到的一个大问题是,您以一种奇怪的方式描述了这一点,并且您忘记了在其中添加一个 asp.Net 标记。您需要的实际上并不是一个 while 循环,它仅在您想向 fDay 添加更多列时才有效。如果您正在处理泛型,则需要创建泛型,否则您需要对所有内容进行硬编码。

Dim strSQL As String = ("SELECT field1, field2 FROM myTable WHERE key like '%' + strkey + '%'")

While oReader.Read()
    With oReader
        Dim li As New ListItem(oReader(0).ToString())
        fday.Items.Add(li)

        Dim txt as New TextBox()
        txt.Text = oReader(1).ToString()
        //store txt somewhere permanent?
    End With 'end With
End While 'End While

我假设这更像你想要的。如果这也不是,请更具体地了解您正在处理的数据结构以及每行数据实际包含的内容。您可能(可能)需要一个不同的 fDay 数据结构来保存新数据,以便每条记录显示所有字段而不仅仅是 1。

于 2012-08-02T19:58:11.437 回答