无法在ListView ItemEditing中使用FindControl()

时间:2012-04-23 15:18:24

标签: asp.net listview listviewitem findcontrol

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

3 个答案:

答案 0 :(得分:2)

单击项目的“编辑”按钮,但在将ListView项目置于编辑模式之前,将引发ItemEditing事件。因此,EditItemTemplate中的控件目前无法使用。

More Info and example

答案 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";
}