0

朝のスタックオーバーフロー、

aspx ページに次のコードを含むリピーターがあります。

<asp:Repeater ID="Contactinforepeater" runat="server">
<HeaderTemplate>
<h1>Contact Information</h1>
</HeaderTemplate>

<ItemTemplate>
<table width="50%">
<tr>
<td colspan="2"><%#Container.DataItem("position")%></td>
</tr>
<tr>
<td>Name:</td>
<td><%#Container.DataItem("surname")%></td>
</tr>
<tr>
<td>Telephone:</td>
<td><%#Container.DataItem("telephone")%></td>
</tr>
<tr>
<td>Fax:</td>
<td><%#Container.DataItem("fax")%></td>
</tr>
<tr>
<td>Email:</td>
<td><%#Container.DataItem("email")%></td>
</tr>
</table>
</ItemTemplate>

<SeparatorTemplate>
<br /><hr /><br />
</SeparatorTemplate>

</asp:Repeater>

次に、データを取得するために aspx.vb にこのコードがあります。

If did = 0 Then
            s = "sql works on db server"
            x = New SqlCommand(s, c)
            x.Parameters.Add("@contentid", Data.SqlDbType.Int)
            x.Parameters("@contentid").Value = contentid
            c.Open()
            r = x.ExecuteReader
            r.Read()
            Contactinforepeater.DataSource = r
            Contactinforepeater.DataBind()
        End If
        c.Close()
        r.Close()

        If Not did = 0 Then
            s = "sql works on db server"
            x = New SqlCommand(s, c)
            x.Parameters.Add("@contentid", SqlDbType.Int)
            x.Parameters("@contentid").Value = contentid
            x.Parameters.Add("@did", SqlDbType.Int)
            x.Parameters("@did").Value = did
            c.Open()
            r = x.ExecuteReader
            r.Read()
            Contactinforepeater.DataSource = r
            Contactinforepeater.DataBind()
        End If
        r.Close()
        c.Close()

「did」が「0」であるかどうかに関係なく、ページにデータが出力されません。ヘッダー テンプレートから「連絡先情報」の h1 ヘッダーを取得するだけです。

sqlsms で s の値をテストしましたが、正常に動作します。役職、姓、電話、ファックス、電子メールはすべてデータベースに存在します。私がチェックしている特定のページは存在し、連絡先情報が 1 セット添付されています。

どこが間違っていますか?

ありがとう!

ps。私の構文は正しいように見えますか?

pps。また、同じ結果を達成するためのさまざまな方法にもオープンです。sqldatasource 経由で試してみましたが、変数をパラメーターとして使用するときに問題が発生しました (変数を選択するオプションはなく、コントロール、クエリ文字列などのみ)。

4

1 に答える 1

0

解決策は、分離コード ブロックを次のように変更することでした。

 If r.HasRows Then
                Contactinforepeater.DataSource = r
                Contactinforepeater.DataBind()
            End If

乾杯

于 2010-04-15T07:54:35.623 に答える