1

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

3 回答 3

2

ItemEditing单击项目的“编辑”按钮时引发该事件,但在 ListView 项目进入编辑模式之前。因此,此时控件EditItemTemplate不可用。

更多信息和示例

于 2012-04-23T16:45:45.277 回答
2

您应该首先执行 DataBind(),如下所示:

    ListView1.EditIndex = e.NewEditIndex;
    ListView1_BindData(); // a function that get the DataSource and then ListView1.DataBind()

// 现在像以前一样找到控件

于 2012-11-12T09:57:33.653 回答
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";
}
于 2012-04-23T16:15:42.483 回答