none
如何得知第兩層 Repeater 內的 CheckBox 是否被核選 RRS feed

  • 問題

  • 我有兩層 Repeater , 在第二層的 Repeater 裡有一個 Button, 請問有辦法抓取到當這個按鈕按下去的事件嗎?

     

     

    .aspx

    <asp:Repeater ID="Repeater1" runat="server" EnableViewState="True"><ItemTemplate>
    
    	<span class="productmodel-title"><%#Eval("series_id")%></span>
    
    	<asp:Repeater ID="Repeater2" runat="server" EnableViewState="True"><ItemTemplate>
    
    		<asp:CheckBox ID="CheckBox1" runat="server" CommandName="COMP" AutoPostBack="True" CssClass='<%#Eval("pdt_id")%>' />
    
    	</ItemTemplate></asp:Repeater>
    
    </ItemTemplate></asp:Repeater>
    

     

     

    .vb

    Protected Sub Repeater1_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles Repeater1.ItemDataBound
    
     Dim Repeater2 As Repeater = CType(e.Item.FindControl("Repeater2"), Repeater) '取得Repeater2 控制項(產品資料)
     series = "'" & e.Item.DataItem("serial_id").ToString & "'" '取得目前的系列名稱
    
     Dim dv As New DataView
     dv = pdtdetail.DefaultView
     dv.RowFilter = "series = " & series
    
     Repeater2.DataSource = dv
     Repeater2.DataBind()
    
    End Sub
    
    Protected Sub Repeater1_ItemCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.RepeaterCommandEventArgs) Handles Repeater1.ItemCommand
     MsgBox(e.CommandName)'抓不到第二層的事件
    End Sub
    

     


    • 已編輯 Pupu21 2011年3月18日 上午 07:37 原標題:抓不到第兩層 Repeater 內的按鈕事件
    2011年3月15日 上午 11:51

解答

  • 解決了!!

     

    Protected Sub Repeater1_ItemCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.RepeaterCommandEventArgs) Handles Repeater1.ItemCommand
    
    
          For Each item As Control In Repeater1.Controls
    
            rp2 = DirectCast(item.FindControl("Repeater2"), Repeater)
    
            For Each item2 As Control In rp2.Controls
    
              Dim compareItem As CheckBox = DirectCast(item2.FindControl("CheckBox1"), CheckBox)
    
              If compareItem.Checked Then
    
                // 需要動作的程式碼
    
              End If
    
            Next
    
    End Sub
    

    • 已標示為解答 Pupu21 2011年3月18日 上午 06:32
    • 已編輯 Pupu21 2011年3月18日 上午 07:18 寫在 Repeater1.ItemCommand
    • 已取消標示為解答 Pupu21 2011年3月18日 上午 07:18
    • 已標示為解答 91MVP, Moderator 2011年3月18日 上午 08:07
    2011年3月18日 上午 06:32

所有回覆

  • hi, 請您往幾個方向去試一下:

    1. 是沒有觸發,還是抓不到e.CommandName ?
    2. 觸發的會不會是 Repeater2的ItemCommand?
    3. 在Repeater1的ItemDataBound時,findcontrol後,加載event handler模組到Repeater2的ItemCommand上試試看。

    希望對你有幫助。

     


    常用資源參考:
    小弟的blog: In 91,wiki: my wiki
    2011年3月15日 下午 12:40
    版主
  • 2011年3月15日 下午 03:15
  • 按鈕可以直接在aspx指定Click事件所對應的method
    2011年3月15日 下午 03:41
    版主
  • @tihs

    只有一層的話,這些程式碼都是正常運作的

    2011年3月16日 上午 05:19
  • @阿尼

    在 .vb 裡面沒辦法撰寫 Repeater1 裡的 button 事件

    2011年3月16日 上午 05:20
  • @91

    我剛剛發現 似乎可以取得 CommandName ,但是要知道是在哪一次產生的 Repeater2 裡面

    • 已編輯 Pupu21 2011年3月16日 上午 07:53
    2011年3月16日 上午 05:21
  • 在Repeater1裡面的ItemDataBound,串Item Index到Repeater2的CommandName上。

    就可以從Repeater2的e.CommandName知道現在是Repeater1上的哪一列。

    PS:您在回覆協助解答者的資訊,請盡量詳盡一點,不要浪費彼此的時間。也盡量避免矛盾的現象,例如一開始講取不到CommandName,後來取得到。如果是這樣,那也應該說,為什麼一開始取不到,改了什麼之後變成取得到了。

     


    常用資源參考:
    小弟的blog: In 91,wiki: my wiki
    2011年3月16日 上午 07:48
    版主
  • Should u use Repeater2.ItemCommand?

    Protected Sub Repeater2_ItemCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.RepeaterCommandEventArgs) Handles Repeater2.ItemCommand
        MsgBox(e.CommandName)
    End Sub


    大家一齊探討、學習和研究,謝謝!
    Microsoft MVP, Microsoft Community Star(TW & HK), MCT,
    MCSD, MCAD, MCSE+I, MCDBA, MCDST, MCSA, MCTS, MCITP, MCPD
    2011年3月16日 上午 08:48
  • @91

    我會朝著這個方向去試試看的。謝謝您

    另外您說的矛盾現象,我會注意的,造成各位的困擾,深感抱歉。

    2011年3月16日 上午 11:26
  • @KenLin

    沒辦法使用 Handles Repeater2.ItemCommand

    2011年3月16日 上午 11:27
  • 解決了!!

     

    Protected Sub Repeater1_ItemCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.RepeaterCommandEventArgs) Handles Repeater1.ItemCommand
    
    
          For Each item As Control In Repeater1.Controls
    
            rp2 = DirectCast(item.FindControl("Repeater2"), Repeater)
    
            For Each item2 As Control In rp2.Controls
    
              Dim compareItem As CheckBox = DirectCast(item2.FindControl("CheckBox1"), CheckBox)
    
              If compareItem.Checked Then
    
                // 需要動作的程式碼
    
              End If
    
            Next
    
    End Sub
    

    • 已標示為解答 Pupu21 2011年3月18日 上午 06:32
    • 已編輯 Pupu21 2011年3月18日 上午 07:18 寫在 Repeater1.ItemCommand
    • 已取消標示為解答 Pupu21 2011年3月18日 上午 07:18
    • 已標示為解答 91MVP, Moderator 2011年3月18日 上午 08:07
    2011年3月18日 上午 06:32
  • 所以您寫在哪一個事件?

    這跟您原本的問題不一樣啊...

    這就是FindControl硬找而已。

    而您原本的問題是,怎麼找到巢狀Repeater Control裡的按鈕事件。


    常用資源參考:
    小弟的blog: In 91,wiki: my wiki
    2011年3月18日 上午 06:50
    版主
  • @91

    我寫在 Repeater1_ItemCommand 裡面

    我覺得能解決問題的方法就是辦法,只是這個辦法的好壞,要找到好的方法我也有時間上的困難

    這裡你最大,你覺得這不是解答我就取消,這沒問題

     

    但是你的口氣好像是我欠你的

    如果我這麼厲害,我就不會發這個問題了
    2011年3月18日 上午 07:21
  • 呃,我沒有這麼兇的意思,您別介意。

    我只是好奇,您貼的code剛好沒有寫上在哪一個事件,跟您原本問題想要的不一樣而已。

    FindControl當然可以找到哪一個東西被勾選囉,而且我也可以跟您說,放在哪一個事件,您那段code都會work。

    因為使用Repeater, GridView, ListView等資料繫結control,在做批次修改存檔作業時,用的就是foreach+Repeater/GridView/ListView的Items或Rows。

    沒人說你的方法不好,我只是覺得您的回答有一點文不對題,也沒有情緒化的字眼,所以請您也不用氣撲撲的回了這麼酸的一個回覆,謝謝。

    這裡也沒有誰大,版主只是服務大家,協助管理版面的無償職務而已。我也沒有欠您,您也沒有欠我。


    常用資源參考:
    小弟的blog: In 91,wiki: my wiki
    2011年3月18日 上午 07:29
    版主
  • @91

    您都說明了,我再說下去大家也會覺得是我的錯,我改了標題,不知道是否合適,

    目的是希望往後有這個問題的人,能因為正確的發問主旨而找到他需要的答案。

     

    關於文不對題的問題:

    您懂得這類的程式如何運作,所以您能擬定一個正確的發問主題;

    而我不懂,我還在學習。

     

    例如:

    發問「地磚要怎麼貼才不會造成中間會有空心的情況發生」?

     懂貼地磚的會覺得你的問題很奇怪,因為會空心根本不是貼的問題。

    了解整個原理只是不知道比例的人會問「水泥和不同種類的沙跟水比例要怎麼調才能預防水泥乾了以後不會有空心的現象發生」。

     

    還有,我不是在酸你,酸你的話是來陰的,我很光明正大。

    否則你回我的文也都是在酸我。你自己比對你剛回我的,跟之前回的,句意光聽都差很多

     

    我也知道這是無償職務,也沒有懷疑過。

    就因為是無償職務,很謝謝大家抽空給我建議的方向。謝謝各位。


    站在別人的立場想事情,網路上有很多文章;我這樣批評下來我也有錯,共勉之
    2011年3月18日 上午 07:52
  • @91

    我寫在 Repeater1_ItemCommand 裡面

    我覺得能解決問題的方法就是辦法,只是這個辦法的好壞,要找到好的方法我也有時間上的困難

    這裡你最大,你覺得這不是解答我就取消,這沒問題

     

    但是你的口氣好像是我欠你的

    如果我這麼厲害,我就不會發這個問題了


    我想您可能誤解版主的意思

    論壇是給大家討論問題,互相交流的地方,

    有問題大家討論,互相增長知識

    您的問題是解決的,姑且不論是否有隱藏的問題,

    如果有其他人也有同樣的問題找到這篇,但是看不出解法

    那這篇討論等於是白費的

     

    另外就是板主是很熱心,

    擔心您這樣做不知道是不是會衍生其他的問題出來,

    解法可能就更加複雜了,

    相信大家都有遇過挖東牆補西牆,上線當天牆垮掉,

    一個錯誤的用法,可以執行,但是造成後面除錯的困難是很痛苦的。

     

    另外小弟給您誠心的建議

    在軟體這條路上還是要了解理論

    如果不求甚解,下次遇到問題還是會卡著

    了解理論以一貫之,遇到問題直接從源頭開始解

    這樣以後遇到的問題會越來越少。

     

    2011年3月18日 上午 08:03
  • @丹尼斯毛

    為何我會誤解?這個問題是我們雙方都要去探討的,而不是只有我。

    您這樣說明,我懂。

    我沒這樣的經驗,所以如果過來人用自己的親身經歷,來回答問題,認為我這樣聽了會懂,但實際上我還是不懂,因為我根本不知道 WHY。

     

    職務越大責任就越大,如果久了,則要提醒自己需要以第三者的立場來看事情。

    這是我常提醒自己做人處事的原則,不要讓自己塑造一層膜,而透過這層膜去看事情。

     

    謝謝兩位的指教,我目前只能先完成客戶的需求,在以修改的方式進行。

    此篇如果以這個主題,能選出解答,那就請版主幫我結束掉了。

    2011年3月18日 上午 08:22
  • 解答的意義只是讓後面找資料的人,知道未來同樣的問題,相關的解答是什麼,
    在開發軟體的工作很現實,有時連你自己同公司的同事都不一定會幫忙你這問題(花時間),
    還是珍惜這塊討論的園地,至於討論中的感覺誰欠誰,就當作有個嚴厲的前輩,在遠方幫你debug的感覺, 是不是亦師亦友好多了.

     


    請關心你的發問 ^_^
    2011年3月21日 上午 05:41