2011-02-26 10 views
2

私は、DropDownメニューから選択するたびに更新されるUpdatePanelの中に次のデータバインドDataListを持っています。
しかし、dbテーブルから何も検索されない場合、私は空白のセクションを取得します。 EmptyDataTempateのためのすなわち、「管理者が見つかりません」、「メールが見つかりません」...等...
私は - 私は何をしたいのは、テキストと一緒にItemTemplate内にある同じテーブルを表示しているDataList質問

私は、EmptyDataTemplateがDataListに存在しないことに気付きましたが、私は別のコントロールを使用したくありません。

これを行う方法はありますか?サンプルコードは高く評価されました。ありがとう!

<asp:DataList ID="DataList" runat="server"> 
    <ItemTemplate> 
     <table> 
      <tr> 
       <td class="style1"> 
        Company Admin: 
       </td> 
       <td> 
        <asp:TextBox Text='<%# Eval("CompanyAdmin") %>' CssClass="input input1" ID="co_admin" 
         Width="150" runat="server" ReadOnly="True" /> 
       </td> 
      </tr> 
      <tr> 
       <td> 
        Admin Email: 
       </td> 
       <td> 
        <asp:TextBox Text='<%# Eval("AdminEmail") %>' CssClass="input input1" ID="ad_email" 
         Width="150" runat="server" ReadOnly="True" /> 
       </td> 
      </tr> 
      <tr> 
       <td> 
        Company Email: 
       </td> 
       <td> 
        <asp:TextBox Text='<%# Eval("CompanyEmail") %>' CssClass="input input1" ID="co_email" 
         Width="150" runat="server" ReadOnly="True" /> 
       </td> 
      </tr> 
      <tr> 
       <td> 
        Telephone: 
       </td> 
       <td> 
        <asp:TextBox Text='<%# Eval("Telephone") %>' CssClass="input input1" ID="telephone" 
         Width="150" runat="server" ReadOnly="True" /> 
       </td> 
      </tr> 
      <tr> 
       <td> 
       </td> 
       <td> 
       </td> 
      </tr> 
     </table> 
    </ItemTemplate> 
</asp:DataList> 

答えて

0

フィールドがnullの場合はmsgを返す単純な関数を追加できます。

あなたは一例

<asp:TextBox Text='<%# GetWithMsg(Container.DataItem, "CompanyEmail", "e-mail n/a") %>' CssClass="input input1" ID="co_email" 
        Width="150" runat="server" ReadOnly="True" /> 

と背後にあるコードのため

<%#GetWithMsg(Container.DataItem, "CompanyEmail", "e-mail n/a")%> 

のような関数を呼び出します。

protected string GetWithMsg(object oItem, string cField, string TheMsg) 
{ 
    var TheData = DataBinder.Eval(oItem, cField); 

    if(TheData == null) 
     return TheMsg; 
    else 
     return TheData.ToString(); 
} 
+0

をもしnullの場合は何が起こる可能性がありますか?私はupdatepanelを使用していますので、バインディングが発生したときにドロップダウンリストのselectedindexchangeにコードを追加する必要がありますか? – user618616

+0

@ user618616おそらくnullではありませんが、 ().Lenght == 0(また、string.IsNullOrEを使用することもできますmpty() – Aristos

+0

うーん...まだメッセージを表示していません。 – user618616

0

テストされていないが、mybeあなたは 例えばのにevalをより

'<%# !string.IsNullOrEmpty(Eval("CompanyEmail").ToString()) ? Eval("CompanyEmail") : "Email Not Found" %>' 

明示的なキャストはパフォーマンスの面で良いかもしれない試すことができます

'<%# !string.IsNullOrEmpty(((System.Data.DataRowView)Container.DataItem)["CompanyEmail"].ToString()) ? ((System.Data.DataRowView)Container.DataItem)["CompanyEmail"].ToString() : "Email Not Found" %>' 

希望がitll

サンプル・エディットを助ける:私はあなたのコードを追加しようとしましたが、それはいくつかの理由の違いを作っていない:(それはまだ値を取得するが、表示されていない

protected void BindData() 
{ 
    DataTable dt = DAL.GetData(... 
    if(dt.Rows.Count == 0) 
    { 
     dt.Rows.Add(dt.NewRow()); 
    } 
    DataList.DataSource = dt; 
    DataList.DataBind(); 
} 
+0

何も何らかの理由で働いていません...あなたはこれを行うと考えることができる他の方法はありますか?前もって感謝します! – user618616

+0

申し訳ありませんが、このステートメントに気付かなかったのですが、 "dbテーブルから何も検索されなかった場合は空白のセクションが表示されます"ということは、データをバインドしないことを意味します。 if(dt.Rows.Count == 0) {dt.Rows.Add(dt.NewRow());} – Adam