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で同等のものが異なるものを使用している場合は、自分で翻訳してください。もう1つは、oReaderが何であるか、またはi範囲外の場合にどのような動作をするかわからないことです。このコードがすべての列を読み取り、IndexOutOfRangeExceptionを生成する可能性が非常に高くなります。

--------

列がいくつあるかが正確にわかっている場合は、whileループよりも、厳密な境界を持つforループを使用する方が適切です。 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

私はこれがあなたが望むものにもっと似ていると思います。そうでない場合は、処理しているデータ構造と、データの各行に実際に含まれているものについて、かなり具体的にしてください。各レコードに1つだけでなくすべてのフィールドが表示されるように、新しいデータを保持するために、(おそらく)fDayに異なるデータ構造が必要になる場合があります。

于 2012-08-02T19:58:11.437 に答える