2011-09-14 2 views
2

というラベルが表示されます。私はちょうどリピータからデータを取得したいが、私のコードが十分ではないと思う。私のリピーターの選択された価値を手に入れて私のレーベルに送ることを手伝ってもらえますか?ハイパーリンクA-Zを持つAsp.netリピーター。値をクリックすると

Imports System.Data 
    Imports System.Data.SqlClient 
    Partial Class About_ReportBug 
Inherits System.Web.UI.Page 
Protected _letterFilter As String 
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    If Not IsPostBack Then 
     initControls() 
    End If 

End Sub 
Private Sub initControls() 
    letters_Bind() 
End Sub 
Private Sub letters_Bind() 
    Dim dt As DataTable 
    If Session(Me.ToString() & "_LettersData") Is Nothing Then 
     Dim letters As String() = {"A", "B", "C", "D", "E", "F", _ 
     "G", "H", "I", "J", "K", "L", _ 
     "M", "N", "O", "P", "Q", "R", _ 
     "S", "T", "U", "V", "W", "X", _ 
     "Y", "Z", "All"} 
     dt = New DataTable() 
     dt.Columns.Add(New DataColumn("Letter", GetType(String))) 
     For i As Integer = 0 To letters.Length - 1 
      Dim dr As DataRow = dt.NewRow() 
      dr(0) = letters(i) 
      dt.Rows.Add(dr) 
     Next 
     Session(Me.ToString() & "_LettersData") = dt 
    Else 
     dt = DirectCast(Session(Me.ToString() & "_LettersData"), DataTable) 
    End If 
    rptLetters.DataSource = dt.DefaultView 
    rptLetters.DataBind() 
End Sub 
Private Sub letters_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs) 

    Dim data As DataRowView = DirectCast(e.Item.DataItem, DataRowView) 

    If DirectCast(data(0), String) = _letterFilter Then 
     Dim lnkletter As LinkButton = DirectCast(e.Item.FindControl("lnkletter"), LinkButton) 
     lnkletter.Enabled = False 
    End If 
End Sub 

Private Sub letters_ItemCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.RepeaterCommandEventArgs) 
    If e.CommandName = "Filter" Then 
     Dim repeater As RepeaterItem = Me.rptLetters.Items(e.Item.ItemIndex) 
     Dim lnkletter As TextBox = repeater.FindControl("_lnkletter") 
     Label1.Text = lnkletter.Text 
    End If 
End Sub 

エンドクラス

私のクライアント側

<asp:repeater id="rptLetters" runat="server"> 
      <itemtemplate> 
      <asp:linkbutton id="lnkLetter" runat="server" commandname="Filter" commandargument='<%# DataBinder.Eval(Container, "DataItem.Letter")%>' forecolor ="#8C4510"> 
       <%# DataBinder.Eval(Container, "DataItem.Letter")%> 
      </asp:linkbutton> 
      </itemtemplate> 
     </asp:repeater> 
<br /> 
<asp:Label ID="Label1" runat="server" Text=""></asp:Label> 

答えて

1

ラベルは、あなただけのItemDataBoundまたはItemCommandの中からそれを設定することができます外部の範囲外の場合。 e.Item.FindControlは、お客様のItemTemplate内のコントロールのみを検索します。

Label1.Text = "Some Text" 

別の方法としては、ItemTemplateの外に木や参照のコントロールを歩いてNamingContainerを使用することができます。

Dim label1 As Label= DirectCast(
        e.Item.NamingContainer.FindControl("Label1"), Label) 
label1.Text = "Some Text" 

ItemCommandから選択した項目を取得するには:あなたはまた、また、リピーターの OnItemCommandイベントを逃す

Protected Sub letters_ItemCommand(ByVal source As Object, 
            ByVal e As RepeaterCommandEventArgs) 
            Handles rptLetters.ItemCommand 
     Dim rpItem As RepeaterItem = Me.rptLetters.Items(e.Item.ItemIndex) 
     Dim lnkletter As LinkButton = DirectCast(e.Item.FindControl("lnkletter"), 
               LinkButton) 
     Label1.Text = lnkletter.Text 
End Sub 

<asp:repeater id="rptLetters" runat="server" OnItemCommand="letters_ItemCommand"> 
      <itemtemplate> 
      <asp:linkbutton id="lnkLetter" runat="server" 
      commandname="Filter" 
      commandargument='<%# DataBinder.Eval(Container, "DataItem.Letter")%>' 
      forecolor ="#8C4510"> 
       <%# DataBinder.Eval(Container, "DataItem.Letter")%> 
      </asp:linkbutton> 
    </itemtemplate> 
</asp:repeater> 
+0

= "いくつかのテキスト" を意味します。Label1.Textん何先生?どこに置くの? – Janwel

+0

サー? :)私はちょうどあなたが 'Label1'を(FindControlではなく)メソッドの中から参照する方法を意味しています。実装でこれを修正しました。 – TheCodeKing

+0

私は何を言ったのですか?まだそれは働いていません – Janwel

3

こんにちは下記を参照してください、あなたのコードを変更してみてください:

Private Sub letters_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles rptLetters.ItemDataBound 
Private Sub letters_ItemCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.RepeaterCommandEventArgs) Handles rptLetters.ItemCommand 

Dim lnkletter As LinkButton = repeater.FindControl("lnkletter") 
Me.Label2.Text = lnkletter.CommandArgument 
関連する問題