我有一个带有命令按钮的dataList,我想单击该按钮并在我单击的按钮的datalist视图中获取字段的值。
我尝试过各种各样的解决方案,但一直在努力。
{“对象引用未设置为对象的实例”}
这是我的数据列表
<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;
}发布于 2014-06-17 00:06:56
您可以使用代码上的以下更改来实现这一点;
在您的按钮控制:
<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;
}
}发布于 2014-06-16 20:22:30
如果我没有弄错,您要查找的控件的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;https://stackoverflow.com/questions/24250054
复制相似问题