【问题标题】:How do i get the value of a datalist item with a button click如何通过单击按钮获取数据列表项的值
【发布时间】:2014-06-16 18:38:35
【问题描述】:

我有一个带有命令按钮的数据列表,我想单击该按钮并在我单击的按钮的数据列表视图中获取字段的值。

我尝试了各种解决方案,但一直在尝试

{"对象引用未设置为对象的实例。"}

这是我的数据列表

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

【问题讨论】:

    标签: asp.net c#-4.0 datalistitem


    【解决方案1】:

    您的代码使用以下代码更改来执行此操作;

    在您的按钮控件上:

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

    【讨论】:

      【解决方案2】:

      如果我没记错的话,你要找的控件的ID其实叫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;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-20
        • 1970-01-01
        • 2015-06-03
        • 1970-01-01
        • 1970-01-01
        • 2021-12-15
        相关资源
        最近更新 更多