在列表视图项模板中查找相同类型的控件

本文关键字:查找 同类型 控件 列表 视图 | 更新日期: 2023-09-27 18:03:49

我正在处理我所在公司员工的报销申请。该流程的一部分包含一个列表视图,新需求的一部分是,如果费用类型是里程,则用户将无法编辑该项目,只能作为业务规则和英国税收原因的一部分删除和重新提交。

无论如何,我希望能够在listview的每个项目中找到具有特定文本值的控件。

我的想法是这样的,但这是不正确的,我知道为什么。

        Label ExpenseTypeLabel = (Label)Expenses.FindControl("ExpenseTypeLabel");
        string ExpenseType = (ExpenseTypeLabel.Text.ToString());
        if (ExpenseType == "Mileage")
        {
            foreach (ListViewDataItem thisItem in Expenses.Items)
            {
                ImageButton btnEdit = (ImageButton)thisItem.FindControl("btnEdit");
                btnEdit.Enabled = false;

            }
        }

费用是基于周末的,当页面加载时,它抛出了我的异常,因为它不能绑定到特定的单个控件,因为有许多与当前周末的费用相关的expensetypelabel(首先加载)。

我在这里要完成的是在项目模板和交替项目模板中找到所有的ExpenseTypeLabels,并禁用该费用项目的编辑功能。如果你想知道周末是费用,而孩子们是单独的费用项目,请告诉我。

你们这些可爱的人可以告诉我最好的方法来完成这个吗?

感谢马特

在列表视图项模板中查找相同类型的控件

绑定顺序和访问绑定项的时间非常重要;当你的子控件也有绑定项时尤其如此。

如果您想影响这些绑定控件的显示,通常可以从aspx端执行。

创建一个从前端到服务器端的函数的链接,然后将所有必要的参数传递给它:

<asp:listview id='lstExpense'>
   ...
   <asp:button id='btnEdit' enabled='<%#= isEnabled(((Expense)Container.DataItem).ExpenseType) %>' ...
   ...
<asp:listview>

在服务器端,创建一个公共函数来返回该值:

public boolean IsEnabled(string ExpenseType) {
    return ('Mileage' != ExpenseType);
}

最好的解决方案是使用jQuery。毫不夸张地说,你可以用一些简单的东西来完成所有这些:

$('.rowClass').each(function() {
    if ($(this).find('.expenseTypeClass').val() == 'Mileage')) 
        $(this).find('.btnEditClass').attr('disabled','disabled');
})

按如下方式使用OnItemDataBound事件

OnItemDataBound="Expenses_ItemDataBound"
protected void Expenses_ItemDataBound(object sender, ListViewItemEventArgs e)
{
    if (e.Item.ItemType == ListViewItemType.DataItem)
    {
        Label ExpenseTypeLabel = (Label)e.Item.FindControl("ExpenseTypeLabel");
        string ExpenseType = (ExpenseTypeLabel.Text.ToString());
        if (ExpenseType == "Mileage")
        {
            // disable button
        }
    }
}