0

ASP.NET ページにデータ バインド リピーターがあります。リピーターを使用して要素のリストを作成しています。各要素は、別のページにハイパーリンクされている可能性のあるテキスト (データ バインド テーブルの列によって指定) で構成されています。ハイパーリンクを含めるかどうかは、データ バインド テーブルの別の列によって決まります。

問題にアプローチする方法がわかりません。2 番目の列の値に応じて表示または非表示になる HyperLink サーバー コントロールを使用する必要がありますか? リピーターの各アイテムのこのコントロールの Visible プロパティを変更するにはどうすればよいですか? より良いアプローチはありますか?

ありがとう。

4

6 に答える 6

0

これを試して:

void Repeater1_ItemDataBound(Object Sender, RepeaterItemEventArgs e) {

          // Execute the following logic for Items and Alternating Items.
          if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) {
             DataRowView row = e.Item.DataItem as DataRowView;
             if (row["ColumnName2"]  == "Something") {
                ((HyperLink)e.Item.FindControl("HyperLink1")).NavigateUrl= row["ColumnName1"];
             }
             else
             {
               ((HyperLink)e.Item.FindControl("HyperLink1")).Visible = False;
             }
          }
       }
于 2012-08-29T14:45:41.440 に答える
0

リピーターItemDataBoundコマンドを使用します。

 void repeater_ItemDataBound(Object Sender, RepeaterItemEventArgs e) 
   {                          
      DataRowView row = (DataRowView)e.Item.DataItem;

      if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType    ==ListItemType.AlternatingItem) 
       {             
            if(row["othercolumnName"].ToString()==true)//You can check the value here..use your logic
             {
                LinkButton lnk=(LinkButton)e.Item.FindControl("lnkID");
                 lnk.Visible=False;
             }
      }
  }     
于 2012-08-29T14:46:14.173 に答える
0

1ファイアストアプローチ

はい、テンプレートにasp:labelとasp:hyerlinkを追加し、ItemDataBoundでデータにアクセスして、ハイパーリンクとラベルの表示を調整します。

2セカンドアプローチ(高速)

または、c#式に基づいてプロパティVisibleを調整しますEval.DataBinder

Hyperelinkの場合(サンプルのみ)

Visible='<%#
CustomFunction((object)DataBinder.Eval(Container.DataItem, "YourColumn")).ToString()
%>'
于 2012-08-29T14:35:54.020 に答える
0

テスト、変更、および将来の変更への対応が容易になるため、マークアップでこの種の単純なことを行うことを好みます。

これを行う方法の例を次に示します。 Name、 、ShouldWeCreateLinkおよびAddressプロパティを持つオブジェクトのコレクションにバインドしているとします。

<ItemTemplate>
        <tr>
            <td>
                <%--Bind to Name Property--%>
                <%#  Eval("Name") %>
            </td>
            <%--Should we show a hyperlink or a simple text with the address?--%>
            <td>
               <%# Eval("ShouldWeCreateLink").ToString() == "True" ? string.Format("<a href=\"Link.aspx?ID={0}\">{1}</a>", Eval("ID"),"Click me") : Eval("Address")%>
            </td>
        </tr>
    </ItemTemplate>

ハイパーリンクを作成する必要がある場合、上記は次のようなハイパーリンクを生成します。

<a href="link.aspx?ID=9">Click me</a>

ViewStateコード ビハインドからのプロパティへのアクセスが必要な場合、またはプログラムによるアクセスが必要な場合を除き、サーバー コントロールの使用はできる限り避けてください。

于 2012-08-29T15:04:18.233 に答える
0

2 つのコントロールを持つことができます。1 つはハイパーリンクで、もう 1 つは通常のラベルまたはリテラルです。次に、ItemDataBoundイベントで、2 番目の列の値に基づいて適切なコントロールを表示/非表示にします。以下のコード例を参照してください。状況に合わせて変更する必要があることは明らかです。

Private Sub Repeater_ItemDataBound(ByVal sender As Object, Byval e As RepeaterItemEventArgs)
  If (e.Item.ItemType Is ListItemType.Item) Or (e.Item.ItemType Is ListItemType.AlternatingItem) Then
    Dim hyperlink = CType(e.Item.FindControl("HyperLink1"), HyperLink)
    Dim label = CType(e.Item.FindControl("Label1"), Label)
    Dim dataSource = CType(e.Item.DataItem, MyDataSourceObject)

    If (dataSource.HyperLink = String.Empty) Then
      hyperlink.visible = false
    Else
      label.visible = false
      hyperlink.NavigateUrl = dataSource.HyperLink
    End If
  End If
End Sub
于 2012-08-29T14:42:34.263 に答える
0

次のように、リピーターに visible 属性を設定できます。

<asp:HyperLink ID="lnk" runat="server" Visible='<%# Boolean.Parse(Eval("IsVisible").ToString()) %>' />
于 2012-08-29T14:43:09.613 に答える