3

ネストされたリピーターがあるため、コード内のコントロールが表示されないため、FindControl を使用してコントロールを表示する必要があることがわかりました。ボタンクリック後にラベルから値を渡したいのですが、正しく取得するのに苦労しています

値を持つラベル

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

RepeaterItemDataBoundName

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

私は最初に通常のbuttonOclickコントロールを持っていましたが、それをラベル値と組み合わせて、ネストされたリピーターとこのリピーターのすべての非表示コントロールを使用してデータベースの目的で最終メソッド「MutateSold」を呼び出す方法がわかりません

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;
     }
}
4

1 に答える 1

1

ClickのイベントはbtnPaid次のような署名を持つイベントハンドラーを予期しているため、タイトルに投稿したエラーが発生します。

protected void btnButton_Click(object sender, EventArgs e)

次のシグネチャを持つメソッドをポイントしています。

protected void rlrtAdres_ItemDataBound(object sender, RepeaterItemEventArgs e)

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

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

lblOrderNrまたは、ボタンのCommandArgumentプロパティに値を追加して、そこから直接取得することもできます。

<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
}
于 2011-07-19T21:46:28.693 に答える