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

时间:2011-09-20 16:45:24

标签: c# asp.net css checklistbox

我有一个数据绑定的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"/> - &gt; <td> - &gt; <tr>)。我之前使用过:first-child伪元素,但是我的网络搜索这种技巧没有结果,所以我有疑虑。不过可以问一下,对吗?

1 个答案:

答案 0 :(得分:1)

这可能适合你。它会完全从列表中删除该项,以便它根本不会被渲染:

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')函数隐藏/显示包含它们的整个表行。

相关问题