2009-09-02 9 views
1

今週は私の人生の中で一生懸命ASP.NETを書いたことはありませんので、どうか簡単にどうぞ。ASPでのnullデータベース値のチェックRepeaterコントロール

データベースの画像を表示するASP.NETページがあります。私はSqlDataReaderを作成し、このリーダにリピータをバインドします。このページには、ピクチャのサムネイル(データベースからのパス)、ピクチャが撮影されたカメラの名前(データベースから)、およびピクチャのコメントの3つの列を含むテーブルが表示されます。

写真をデータベースにアップロードすると、コメントは無効になります。テーブルにコメントが存在する場合、またはコメントフィールドがデータベース内でヌルの場合は、ASPテキストボックスとボタンを表示して、ユーザーがピクチャについてのコメントを入力するようにします。

これは、私が思うほど簡単ではないことが判明しました。誰も私に提案することができます:

A)は、この行の「コメント」欄にはB

nullであるかどうかを決定するための明示的なテスト)条件付きtexboxを持つ(テキスト、またはテキストボックス/ボタンの組み合わせのいずれかを表示する方法データベースの「ID」列のID)

私は、ボタンクリックハンドラを記述してデータベースをコメントで更新することができると信じています。

多くの方々に感謝しており、将来私はASP.NETプロジェクトを辞退することを約束します!

答えて

2

データバインディングのコンテキストになっているので、プレースホルダ(またはそのような他のコントロール)の可視プロパティに対してデータバインディング式を使用できます。 nullでないために

<asp:PlaceHolder runat="server" visible='<%# Convert.IsDbNull(Eval("comment"))%>'> 
    <asp:TextBox ID="txtNewComment"... /> 
    <asp:Button ... /> 
</asp:PlaceHolder> 

、単に「変換」のexclaimationポイントインフロントを平手打ちし、それがnullではないときに表示されます。 clickHandlerについては

、「送信者」はボタンになりますので、あなたは常に簡単な

((Button)sender).Parent.FindControl("txtNewComment") 

を行うことができますそして、あなたはあなたのテキストボックスを持っています。

0

コメントフィールドにデータベースにNULL値が含まれている場合、Alexの提案を使用してコメントまたはテキストボックス/ボタンのコンボを表示できます。リピーター内のボタンのクリックを処理するには、 'OnItemCommand'にバインドする必要があると思います。

例を示します。

<asp:Repeater ID="myRepeater" runat="server" OnItemCommand="myRepeater_ItemCommand"> 
    <HeaderTemplate> 
     <table> 
    </HeaderTemplate> 
    <ItemTemplate>   
     <tr> 
      <td> 
       <asp:Image ID="imgThumbNail" runat="server" ImageUrl='<%# Eval("path") %>' /> 
      </td> 
      <td> 
       <asp:Label ID="lblCamera" runat="server" Text='<%# Eval("camera") %>'></asp:Label> 
      </td> 
      <td> 
       <asp:PlaceHolder ID="PlaceHolder1" runat="server" Visible='<%# Convert.IsDBNull(Eval("comment"))%>'> 
        <asp:Button ID="btnAddComment" runat="server" CommandArgument='<%# Eval("id") %>' CommandName="AddComment" Text="Add Comment" /> 
        <asp:TextBox ID="txtComment" runat="server" </asp:TextBox>      
       </asp:PlaceHolder>    
       <asp:PlaceHolder ID="PlaceHolder2" runat="server" Visible='<%# !Convert.IsDBNull(Eval("comment"))%>'> 
        <asp:Label ID="lblComment" runat="server" Text='<%# Eval("comment") %>'></asp:Label> 
       </asp:PlaceHolder> 
      </td> 
     </tr> 
    </ItemTemplate> 
    <FooterTemplate> 
     </table> 
    </FooterTemplate> 
</asp:Repeater> 

protected void myRepeater_ItemCommand(object source, RepeaterCommandEventArgs e) 
{ 
    if (e.CommandName == "AddComment") 
    { 
     TextBox txtComment = (TextBox)e.Item.FindControl("txtComment"); 
     int id = Convert.ToInt32(e.CommandArgument); 
     // use the record id to update the comment in the database with the value contained in the txtComment.Text property here 
    } 
} 
関連する問題