2011-09-14 3 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.FindControlItemTemplate 내에서만 컨트롤을 찾습니다.

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

선생님 "일부 텍스트"는 말인가요? 그리고 나는 그것을 어디에 둘 것인가? – Janwel

+0

님? :) 나는 단지 당신이'Label1'을 (FindControl보다는) 메소드 내부에서 참조하는 방법을 의미하는 것입니다. 부분적으로는 질문을 잘못 읽었 기 때문입니다. 구현으로 지금 수정했습니다. – TheCodeKing

+0

선생님, 내가 말했듯이 무슨 말을해야만 했는가? 아직도 일하지 않는다. – Janwel

3

안녕하세요 아래 참조, 코드를 변경해보십시오 : = label1.text 무엇

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