繁体   English   中英

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

[英]ASP.NET: Hide CheckBox items in CheckBoxList control

我有一个数据绑定的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')函数来隐藏/显示包含它们的整个表格行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM