我在ASP.NET Web应用程序中有一个ListView。当用户单击编辑按钮时,我希望弹出依赖于项目的某些值的文本字段。但是,我似乎无法在ListView1_ItemEditing()函数中找到任何控件。
我已经在互联网上阅读了Microsoft文档和各种帮助主题,但他们的建议似乎并不适用于我。这通常是我看到的:
ListViewItem item = ProductsListView.Items[e.NewEditIndex];
Label dateLabel = (Label)item.FindControl("DiscontinuedDateLabel");
为简单起见,我只想在ListView1_ItemEditing()中选择一个标签。这是ListView1_ItemEditing()中的代码:
protected void ListView1_ItemEditing(Object sender, ListViewEditEventArgs e)
{
DataBind(); //not sure if this does anything
ListViewItem item = ListView1.Items[e.NewEditIndex];
Label debugLabel = (Label)item.FindControl("label_editing");
debugLabel.Text = "Works";
}
这是ASP
<EditItemTemplate>
<asp:Label ID="label_editing" runat="server" Text="hello world"></asp:Label>
</EditItemTemplate>
调试时,item和debugLabel都是NULL。
更新:我通过将我的逻辑移动到ItemDataBound然后检查我的tr(包含文本框)是否在该特定数据项中来解决了这个问题。代码如下:
protected void ListView1_ItemDataBound(object sender, ListViewItemEventArgs e)
{
if (e.Item.ItemType == ListViewItemType.DataItem)
{
Control tr_verizon = e.Item.FindControl("tr_verizonEdit");
Control tr_att = e.Item.FindControl("tr_attEdit");
if (tr_verizon != null)
{
//Control tb_meid = e.Item.FindControl("TextBox_Meid");
Label lbl_carrierId = (Label)e.Item.FindControl("lbl_carrierId");
if (lbl_carrierId == null)
{
Message.Text = "lbl_carrierId is null!";
}
else if (lbl_carrierId.Text.Equals(""))
{
Message.Text = "lbl_carrierId is empty!";
}
else
{
string recordId = lbl_carrierId.Text;
if (tr_verizon != null && tr_att != null)
{
if (lbl_carrierId.Text.Equals("1"))
{
tr_verizon.Visible = false;
tr_att.Visible = true;
}
else
{
tr_verizon.Visible = true;
tr_att.Visible = false;
}
}
}
}
}
}
答案 0 :(得分:2)
单击项目的“编辑”按钮,但在将ListView项目置于编辑模式之前,将引发ItemEditing
事件。因此,EditItemTemplate
中的控件目前无法使用。
答案 1 :(得分:2)
首先应该执行DataBind(),如下所示:
ListView1.EditIndex = e.NewEditIndex;
ListView1_BindData(); // a function that get the DataSource and then ListView1.DataBind()
//现在像以前一样找到控件
答案 2 :(得分:0)
您是否尝试过投射sender
对象而不是尝试按索引访问ListViewItem?
protected void ListView1_ItemEditing(Object sender, ListViewEditEventArgs e)
{
var item = sender as ListViewItem;
var debugLabel = item.FindControl("label_editing") as Label;
debugLabel.Text = "Works";
}