在列表视图项模板中查找相同类型的控件
本文关键字:查找 同类型 控件 列表 视图 | 更新日期: 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
}
}
}