Как получить значение элемента списка данных нажатием кнопки

У меня есть список данных с командной кнопкой, я хочу нажать кнопку и получить значение поля в представлении списка данных кнопки, которую я нажал.

Я пробовал различные решения, но продолжаю получать

{"В экземпляре объекта не задана ссылка на объект."}

вот мой даталист

<asp:DataList ID="DataList1" runat="server" DataKeyField="ID" DataSourceID="SqlDataSource1" Width="579px" OnItemCommand = "Datalist1_ItemCommand">
    <ItemTemplate>
        Epic:
        <asp:Label ID="EpicLabel" runat="server" Text='<%# Eval("Epic") %>' />
        <br />
        ID:
        <asp:Label ID="IDLabel" runat="server" Text='<%# Eval("ID") %>' />
        <br />
        Company:
        <asp:Label ID="CompanyLabel" runat="server" Text='<%# Eval("Company") %>' />
        <br />
        Date:
        <asp:Label ID="DateLabel" runat="server" Text='<%# Eval("Date") %>' />
        <br />
        time:
        <asp:Label ID="timeLabel" runat="server" Text='<%# Eval("time") %>' />
        <br />
        NewsItem:
        <asp:Label ID="NewsItemLabel" runat="server" Text='<%# Eval("NewsItem") %>' />
        <br />
        HeadLine:
        <asp:Label ID="HeadLineLabel" runat="server" Text='<%# Eval("HeadLine") %>' />
        <br />

        <asp:Button ID="Button1" runat="server" CommandArgument='<%# Eval("Epic", "{0}") %>' Text="Button" />

<br />
    </ItemTemplate>
</asp:DataList>

и она мой код позади

    public void Datalist1_ItemCommand(object sender, DataListCommandEventArgs e)

    {
        var button = sender as Button;

       /// if (button == null) return;

        var dataListItem = button.NamingContainer as DataListItem;

        if (dataListItem == null) return;

        var currentKey = DataList1.DataKeys[dataListItem.ItemIndex];

        var myLabel = button.Parent.Controls.Cast<Control>().FirstOrDefault(x => x.ID == "Epic") as Label;

      ///  if (myLabel == null) return;

        var myLabelText = myLabel.Text;
    }

person user3746002    schedule 16.06.2014    source источник


Ответы (2)


Вы код делаете это, используя следующие изменения в вашем коде;

на вашей кнопке управления:

 <asp:Button ID="Button1" runat="server" CommandName="myCommand" Text="Button" />

в вашем событии ItemCommand:

    protected void DataList1_ItemCommand(object source, 
                                        DataListCommandEventArgs e)
    {
        switch (e.CommandName)
        { 
            case "myCommand":
                // more code could go here

                Label myLabel = (Label)e.Item.FindControl("EpicLabel");
                var myLabelText = myLabel.Text;

                // more code could go here
                break;
        }
    }
person Ali    schedule 17.06.2014

Если я не ошибаюсь, идентификатор элемента управления, который вы ищете, на самом деле называется EpicLabel, а не просто Epic. Если myLabel - это то, о чем говорит отладчик, не установлен на экземпляр объекта, скорее всего, это ваша проблема.

Итак, эта строка:

var myLabel = button.Parent.Controls.Cast<Control>().FirstOrDefault(x => x.ID == "Epic") as Label;

должно быть:

var myLabel = button.Parent.Controls.Cast<Control>().FirstOrDefault(x => x.ID == "EpicLabel") as Label;
person j.f.    schedule 16.06.2014