我的网格视图有3列(名称,地址,状态)和一个复选框。状态有3个属性,活动,待定和已禁用。该页面加载数据库中的所有信息。加载页面时,只显示ACTIVE的帐户(并且复选框应保持未选中状态) 单击该复选框时,页面应加载DISABLED,以及第一次加载页面时已显示的帐户。
.aspx的:
<asp:CheckBox ID="ChkBox1" runat="server" AutoPostBack="true" OnCheckedChanged="cbShowAllColumn_Changed" TextAlign="Right" Text="Show All"/>
</asp:Panel>
代码背后:
protected void cbShowColumn_Changed(object sender, EventArgs e)
{
string columnName = (sender as CheckBox).ID.Substring(1);
gvTest.Columns[(int)Enum.Parse(typeof(AccountColumns), columnName)].Visible = (sender as CheckBox).Checked;
}
protected void cbShowAllColumn_Changed(object sender, EventArgs e)
{
bool _checked = (sender as CheckBox).Checked;
foreach (Control ctrl in pAccount.Controls)
if (ctrl is CheckBox)
{
(ctrl as CheckBox).Checked = _checked;
gvMain.Columns[(int)Enum.Parse(typeof(AccountColumns), (ctrl as CheckBox).ID.Substring(2))].Visible = _checked;
}
}
答案 0 :(得分:0)
我编译了一个小的asp .net页面来做你所要求的。
注意:在您的项目中,您应该选择&#34;来源&#34;超出BindGrid方法,这样你就不会得到&#34;得到&#34;每次页面回发时都会从头开始绘制数据。我这样做是因为我使用了匿名类型。
注意#2 我将int转换为您的枚举,然后转换为字符串。由于您使用真实数据,因此您应该使用枚举本身来处理不同的内容。
标记:
<asp:CheckBox ID="ChkBox1" runat="server" AutoPostBack="true" OnCheckedChanged="cbShowAllColumn_Changed" TextAlign="Right" Text="Show All"/>
<br/>
<asp:gridview ID="gvMain" runat="server" >
</asp:gridview>
代码隐藏:
protected void Page_Load(object sender, EventArgs e)
{
BindGrid(false);
}
private void BindGrid(bool showActiveOnly)
{
var source = Enumerable.Range(1, 10)
.Select(number => new { number, status = (Enum.ToObject(typeof(Statuses), number % 3)).ToString() });
var filteredSource = source.Where(x => x.status == "Active" || !showActiveOnly);
gvMain.DataSource = filteredSource;
gvMain.DataBind();
}
protected void cbShowAllColumn_Changed(object sender, EventArgs e)
{
bool _checked = (sender as CheckBox).Checked;
BindGrid(_checked);
}
private enum Statuses
{
Active,
Pending,
Disabled
}