我在 ASP.NET Web 应用程序中有一个 ListView。当用户单击编辑按钮时,我希望弹出取决于项目某些值的文本字段。但是,我似乎在我的 ListView1_ItemEditing() 函数中找不到任何控件。
我已阅读 Internet 上的 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;
}
}
}
}
}
}