8

データベース値をasp.netページのリピーターコントロールに出力するコードがあります。ただし、返される値の一部は null/空白です。これにより、空白があると結果が見苦しくなります。

asp.netコントロールで条件付きロジックをどのように実行しますか。つまり、値が存在する場合は値を出力し、そうでない場合は次の値に進みます。

また、追加する必要があります-マークアップも条件付きにする必要があります。値がないかのように、
タグも必要ありません。

データベースから返される値のタイプを示すためだけに、以下のコード スニペットを示します。(アドレス 2に値がまったくないことはよくあることです)。

<div id="results">
    <asp:Repeater ID="repeaterResults" runat="server">
        <ItemTemplate>
             Company:      <strong><%#Eval("CompanyName") %></strong><br />
             Contact Name: <strong><%#Eval("ContactName") %></strong><br />
             Address:      <strong><%#Eval("Address1")%></strong><br />                    
                           <strong><%#Eval("Address2")%></strong><br />..................

どうもありがとう

4

5 に答える 5

9

各キーと値のペアを 2 つのプロパティを持つカスタム コントロールにラップすることをお勧めします。このコントロールは、値が空でない場合にのみ表示されます。

 <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="ShowPair.ascx.cs" Inherits="MyWA.ShowPair" %>

<% if (!string.IsNullOrEmpty(Value))
   { %>
<%=Key %> : <%=Value %>
<% } %> 

次に、コントロールをリピーター テンプレートに配置します。

<asp:Repeater runat='server' ID="repeater1">
     <ItemTemplate>
        <cst:ShowPair Key="Company Name:" Value="<%#((Company)Container.DataItem).CompanyName %>" runat="server"/>
        <cst:ShowPair Key="Contact Name:" Value="<%#((Company)Container.DataItem).ContactName %>" runat="server" />
        <cst:ShowPair Key="Address 1:" Value="<%#((Company)Container.DataItem).Address1 %>" runat="server" />
     </ItemTemplate>
    </asp:Repeater>
于 2008-12-15T13:56:59.313 に答える
6

これは、null /空白の値をどこでどのように処理するか、そして実際に2つのうちどちらを処理するかに完全に依存するため、かなり主観的なものになります。

たとえば、データベースレベルでヌルを処理するのが好きな人もいれば、ビジネスロジックレイヤーでデフォルト値をコーディングするのが好きな人もいれば、UIでデフォルト/空白の値を処理するのが好きな人もいます。

いずれにせよ、私の個人的な選択は、混乱を避けるために、UIレベルでそのフィールドに使用できるデータがないことを表示することです。最悪の場合、次のようなものがあります。

<strong><% If (Eval("Address2").Length > 0) Then %><%#Eval("Address2")%><% Else %>No data available for Address 2<% End If %></strong><br />

そうすれば、少なくともユーザーは、システム/管理上のエラーが発生したかどうかを知るのではなく、データが利用できないことを知ることができます。

お役に立てば幸いです:)

于 2008-12-15T12:32:01.090 に答える
3

これを行う方法はいくつかありますが、私は通常、リピーターのアイテムがデータアイテムにバインドされたときに発生するリピーターのイベントOnItemDataBoundイベントを使用しています。

OnItemDataBoundイベントを説明するために、常に表示される1つのフィールド(Name)とnullでない場合に表示されるオプションのフィールド(Optional)を持つリピーターがあると仮定します。さらに、オプションのフィールドがnullまたは空の場合、事前定義された値を表示したいと思います。
これを行うには、最初にリピーターのOnItemDataBoundイベントをメソッドを指すように設定し、リピーターのアイテムテンプレートを作成する必要があります。後でOnItemDataBoundメソッドで参照できるリピーターのアイテムテンプレート内の任意のサーバーコントロールを使用できます。

<asp:Repeater ID="repeaterResults" runat="server"   OnItemDataBound="repeaterResult_ItemDataDataBound">
    <ItemTemplate>
    <strong><%#Eval("Name") %></strong>
    <asp:Literal runat="server" ID="ltlOption" />
    <br />
    </ItemTemplate></asp:Repeater>

さらに、次のように、NameとOptionの2つのプロパティを持つ単純なオブジェクトのコレクションをバインドするとします。

public class SimpleEntity
{
    public string Name {get;set;}
    public string Option {get;set;}
}

次に、repeaterResult_ItemDataDataBoundメソッドを次のように実装します。

protected void repeaterResult_ItemDataDataBound(object sender, RepeaterItemEventArgs e)
{
  SimpleEntity ent = e.Item.DataItem as SimpleEntity;
  Literal ltlOption = e.Item.FindControl("ltlOption") as Literal;
  if (ent != null && ltlOption != null)
  {
     if (!string.IsNullOrEmpty(ent.Option))
     {
        ltlOption.Text = ent.Option;
     }
     else
     {
        ltlOption.Text = "Not entered!";
     }

  }
}

上記の方法が実装されているため、オプションのフィールドが存在する場合は表示され、オプションのフィールドがnullまたは空の文字列の場合は、事前定義された文字列「未入力!」が表示されます。

于 2008-12-15T12:38:19.453 に答える
1

IsDBNull(obj)を使用できます

If IsDbNull(<%#Eval("Address2")%>) then
     etc
End If
于 2008-12-15T12:36:18.803 に答える