Janwel
Janwel

Reputation: 300

Asp.net repeater with hyperlink A-Z and when clicked the value goes to label

got a few question here. i just want to get the data from the repeater but i guess my codes isnt enough. Could you help me get the selected value of my repeater and send it to my label?

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

End Class

my client side

<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>

Upvotes: 2

Views: 1617

Answers (2)

Sandile
Sandile

Reputation: 31

Hi try changing your code, see below:

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

Upvotes: 3

TheCodeKing
TheCodeKing

Reputation: 19220

If label is out the outside scope you can just set it from within ItemDataBound or ItemCommand. e.Item.FindControl will only find controls within your ItemTemplate.

Label1.Text = "Some Text"

Alternatively you can useNamingContainer to walk up the tree and reference controls outside of the ItemTemplate.

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

To get the selected item from ItemCommand:

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

You also also missing the OnItemCommand event on the repeater.

<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>

Upvotes: 1

Related Questions