'ItemDataBound'のオーバーロードがdelegate 'System.EventHandler'と一致しません

2011-07-19 21 views
2

入れ子のリピータを持っています 私のコードでコントロールが表示されないため、コントロールを表示するためにFindControlを使用しなければならないことがわかりました。 。値の 私はbuttonclick後lableから値を渡したいが、私はそれを得ることに苦労しています右'ItemDataBound'のオーバーロードがdelegate 'System.EventHandler'と一致しません

ラベル

<asp:Label ID="lblordernr" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.sid").ToString()%>'></asp:Label> 

私が使用するボタン:

<asp:Button ID="btnPaid" runat="server" Text="Paid" OnClick="rlrtAdres_ItemDataBound" 
         Style="height: 26px" CssClass="knop" CommandName="btnPaid" /> 

私が最初に通常buttonOclickのCONTRを持っていた

protected void rlrtAdres_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    Label lblordernr = e.Item.FindControl("lblordernr") as Label; 
    Repeater myRepeater = (Repeater)sender; 
    Button btn = (Button)sender; 
    switch (btn.CommandName) 
    { 
     case "btnPaid": 
      MutateSold("paid", lblordernr.Text); 
      break; 
    } 
} 

をRepeaterItemDataBoundオールしかし、私はちょうどあなたがエラーにあなたを取得している

protected void btnButton_Click(object sender, EventArgs e) 
{ 
    Control myControllblordernr = FindControl("lblordernr"); 
    Button btn = (Button)sender; 
    switch (btn.CommandName) 
    { 
     case "btnPaid": 
      MutateSold("paid", myControllblordernr.ToString()); 
      break; 
    } 
} 

答えて

1

このリピーターにラベル値とそれを組み合わせると、ネストされたリピータで、データベースの目的のために、最終的な方法「MutateSold」を呼び出す方法を知らないと、すべての目に見えないコントロール

:あなたはの署名を持っている方法でそれを指している

protected void btnButton_Click(object sender, EventArgs e)

btnPaidClickイベントは次のようにシグネチャを持つイベントハンドラを想定しているため、タイトルに掲載10

protected void rlrtAdres_ItemDataBound(object sender, RepeaterItemEventArgs e)

btnPaidlblordernrはリピーターのために同じItemTemplateである場合は、lblordernrへの参照を取得するためにボタンをFindControlを呼び出すことができます。 btnPaidは、このように宣言されている場合たとえば、:

<asp:Button ID="btnPaid" runat="server" Text="Paid" OnClick="btnPaid_Click" 
    Style="height: 26px" CssClass="knop" /> 

次のコードは、あなたのlblOrderNrへの参照を取得します。

protected void btnPaid_Click(object sender, EventArgs e) 
{ 
    var btnPaid = (Button)sender; 
    var lblOrderNr = (Label)btnPaid.FindControl("lblordernr"); 
    var labelText = lblOrderNr.Text; 

    //Do whatever else needs to be done 
} 

代わりに、あなただけのボタンをCommandArgumentプロパティにlblOrderNrに値を追加することができ、そこからだけでなく、右のそれを得ます。

<asp:Button ID="btnPaid" runat="server" Text="Paid" OnClick="btnPaid_Click" 
    CommandArgument='<%# DataBinder.Eval(Container, "DataItem.sid").ToString()%>' 
    Style="height: 26px" CssClass="knop" /> 


protected void btnPaid_Click(object sender, EventArgs e) 
{ 
    var btnPaid = (Button)sender; 
    var labelText = btnPaid.CommandArgument; 

    //Do whatever else needs to be done 
} 
+0

あなたの時間は、はい、彼らは同じテンプレートにあります – Sjemmie

+0

@Sjemmie問題はありません、私の答えの更新を参照してください。希望が役立ちます。 – rsbarro

+0

あなたはすっごくすごいです、解決はとてもシンプルで、うまくいきます – Sjemmie

関連する問題