c# - ASP.NET:在CheckBoxList控件中隐藏CheckBox项

我有一个数据绑定的CheckBoxList控件,它可能会变得很大,因此我正在尝试为其创建过滤器。这是我在做什么:

foreach( ListItem item in this.UserRolesList.Items ) {
    if( !item.Value.StartsWith( this.RolesFilterList.SelectedValue ) ) {
        item.Attributes.CssStyle["display"] = "none";
    } else item.Attributes.CssStyle["display"] = "inline";
}


除了ASP.NET呈现CheckBoxList时,它是使用表来实现的,除了每个CheckBox控件嵌套在其自己的<TR>元素内之外,这几乎都是可行的。这意味着即使我不想看到的项目没有显示,它们行的空白还是显示的,所以我仍然需要满足很多白人的步伐。

我不知道无需子类化控件就可以访问<TR>元素,这是我没有时间做的“精打细算”功能,因此我想知道是否有CSS技巧我可以用来访问元素的父级的父级(例如,<input type="checkbox"/>-> <td>-> <tr>)。我以前使用过:first-child伪元素,但是我在网络上搜索这种技巧的工作是徒劳的,因此我对此表示怀疑。可以问问,对吗?

最佳答案

这可能对您有用。它将项目从列表中完全删除,因此根本不会显示该项目:

string value = this.RolesFilterList.SelectedValue;
int count = this.UserRolesList.Items.Count - 1;

for(var i=count;i>=0;i--)
{
    ListItem item = this.UserRolesList.Items[i];
    if (!item.Value.StartsWith(value))
    {
        this.UserRolesList.Items.RemoveAt(i);
    }
}


更新资料

根据您上面关于您希望用户如何操作它的评论,您可能最好在javascript中完成所有客户端操作,而不是以这种方式在回发中执行操作。

在jQuery中,您可以创建一个在更改选择列表时运行的函数,该函数随后将在UserRolesList表中找到所有复选框,然后对其进行循环,并根据其值使用.closest('tr')函数隐藏/显示包含它们的整个表格行。

本文翻译自 https://stackoverflow.com/questions/7488705/

网站遵循 CC BY-SA 4.0 协议,转载或引用请注明出处。

标签 c# asp.net css checklistbox


相关文章:

c# - 从该方法中获取变量调用方法的名称

c# - 将SQL DB部署到Azure超时启用索引

c# - 如何仅在DateTime对象中的C#中删除日期的时间部分[关闭]

c# - 如何使用epplus遍历excel表中的行?

c# - 如何在Win7上获得“虚拟机”文件夹?

c# - CLR中的空引用检查

c# - 从文本文件中选择帐户执行操作,然后选择另一个并执行其他操作

c# - linq to sql优化了具有多个联接的组

c# - 无法从“方法组”转换为“ ResumeAfter <object>”

c# - C#:专注于WPF文本框的工具提示