Никакая перегрузка для 'ItemDataBound' не соответствует делегату 'System.EventHandler' - PullRequest
2 голосов
/ 20 июля 2011

у меня есть вложенный репитер Из-за этого ни один элемент управления в моем коде не виден, и из-за этого я обнаружил, что мне пришлось использовать 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" />

RepeaterItemDataBound

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

1 Ответ

1 голос
/ 20 июля 2011

Вы получаете сообщение об ошибке, опубликованное в заголовке, потому что событие Click для btnPaid ожидает обработчик события с такой подписью, как:

protected void btnButton_Click(object sender, EventArgs e)

You 'повторно нацелив его на метод с сигнатурой:

protected void rlrtAdres_ItemDataBound(object sender, RepeaterItemEventArgs e)

Если btnPaid и lblordernr находятся в одном и том же ItemTemplate для ретранслятора, вы можете вызвать FindControl на кнопке, чтобы получить ссылку на lblordernr.Например, если 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
}

В качестве альтернативы, вы можете просто добавитьзначение в 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
}
...