Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在listview项模板中查找相同类型的控件_C#_.net_Asp.net_Listview - Fatal编程技术网

C# 在listview项模板中查找相同类型的控件

C# 在listview项模板中查找相同类型的控件,c#,.net,asp.net,listview,C#,.net,Asp.net,Listview,我正在为我工作的员工申请报销费用。流程的一部分包含列表视图,新要求的一部分是,如果费用类型为“里程”,则用户将无法编辑该项目,只能删除并作为业务规则和英国税务原因等的一部分重新提交 无论如何,我希望能够在listview的每个项目中找到一个具有特定文本值的控件 我的想法如下,但这是不正确的,我知道为什么 Label ExpenseTypeLabel = (Label)Expenses.FindControl("ExpenseTypeLabel"); string

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

无论如何,我希望能够在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;


            }
        }
费用基于周末,当页面加载时,它会抛出我的EXECPION,因为它无法绑定到特定的单个控件,因为有许多ExpenseTypeLabel与当前周末(首先加载)的费用关联

我试图在这里完成的是在项目模板和交替项目模板中查找所有ExpenseTypeLabel,并禁用该费用项目的编辑功能。仅供参考,如果你想知道周末是费用,孩子是个人的费用项目

你们中的一个可爱的人能教我怎样才能做到这一点吗

谢谢


Matt

使用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
        }
    }
}

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

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

创建从前端到服务器端函数的链接,然后向其传递所有必要的参数:

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

不过,最好的解决方案是使用jQuery。不夸张,但您可以通过以下简单的方式完成所有这些:

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

是的,这让我走上了正确的道路,我想,它并不完全满足我的要求,但它让我更好地理解你可以得到答案:-)我不能因为某种原因而禁用按钮,我只能将可见属性设置为false,这让我觉得奇怪!再次感谢!这是一个很好的输入,谢谢,我的经理建议我避免使用AJAX以外的任何客户端脚本,因为它是托管代码。我希望jQuery在某个时候会很快学会,因为我问自己的许多问题都可以通过某种JS/jQ轻松完成
$('.rowClass').each(function() {
    if ($(this).find('.expenseTypeClass').val() == 'Mileage')) 
        $(this).find('.btnEditClass').attr('disabled','disabled');
})