如何防止在Gridview创建的控件在回发后消失
来源:互联网 发布:ubuntu怎么删除用户 编辑:程序博客网 时间:2024/05/06 23:28
本文主要讲述如何实现在标题头上放一个按钮上去,按下去选择一整个列的功能。用三种方法演示效果。
方法一(较简单):
使用模板列
<Columns>
<asp:TemplateField>
<HeaderTemplate>
<asp:ButtonID="Button1" runat="server" Text="全选" OnClick="Button1_Click"/>
</HeaderTemplate>
<ItemTemplate>
<%#Eval("id")%>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundFieldDataField="title"/>
</Columns>
</asp:GridView>
{
if (!IsPostBack)
{
DataTable dt =new DataTable();
dt.Columns.Add("title");
dt.Columns.Add("id");
dt.Rows.Add("sdafsa","1");
dt.Rows.Add("sdafsa","2");
dt.Rows.Add("sdafsa","3");
dt.Rows.Add("sdafsa","4");
GridView1.DataSource = dt;
GridView1.DataBind();
}
}
protected void Button1_Click(object sender, EventArgs e)
{
Button bt = (Button)sender;
if (bt.Text== "全选")
for (int i= 0; i< GridView1.Rows.Count; i++)
{
GridView1.Rows[i].Cells[0].Style.Add("background-color","red");
bt.Text ="取消";
}
else
for (int i= 0; i< GridView1.Rows.Count; i++)
{
GridView1.Rows[i].Cells[0].Style.Add("background-color","white");
bt.Text ="全选";
}
}
</asp:GridView>
{
if (!IsPostBack)
{
DataTable dt =new DataTable();
dt.Columns.Add("title");
dt.Columns.Add("id");
dt.Rows.Add("sdafsa","1");
dt.Rows.Add("sdafsa","2");
dt.Rows.Add("sdafsa","3");
dt.Rows.Add("sdafsa","4");
GridView1.DataSource = dt;
GridView1.DataBind();
}
Button bt =new Button();
//bt.ID ="bt1";
bt.Text ="测试";
bt.CommandArgument ="1";
bt.Click +=new EventHandler(bt_Click);
GridView1.HeaderRow.Cells[1].Controls.Add(bt);
}
protected void GridView1_OnRowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType== DataControlRowType.Header)
{
//Button bt = new Button();
//bt.ID = "bt1";
//bt.Text = "测试";
//bt.CommandArgument = "1";
//bt.Click+=new EventHandler(bt_Click);
//e.Row.Cells[1].Controls.Add(bt);
}
}
protected void bt_Click(object sender, EventArgs e)
{
Button bt = (Button)sender;
if (bt.CommandArgument== "1")
for (int i= 0; i< GridView1.Rows.Count; i++)
{
GridView1.Rows[i].Cells[0].Style.Add("background-color","red");
bt.CommandArgument ="0";
}
else
for (int i= 0; i< GridView1.Rows.Count; i++)
{
GridView1.Rows[i].Cells[0].Style.Add("background-color","white");
bt.CommandArgument ="1";
}
}
第三种(有点难度):
使用viewstate保存序列化后的控件,在创建时再反序列化
HTML code
<asp:GridView ID="GridView1" runat="server" Width="230px" OnLoad="GridView1_Load">
</asp:GridView>
C# code
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DataTable dt = new DataTable();
dt.Columns.Add("title");
dt.Columns.Add("id");
dt.Rows.Add("sdafsa", "1");
dt.Rows.Add("sdafsa", "2");
dt.Rows.Add("sdafsa", "3");
dt.Rows.Add("sdafsa", "4");
GridView1.DataSource = dt;
GridView1.DataBind();
}
}
protected void GridView1_Load(object sender, EventArgs e)
{
oButton bt = new oButton();
if (ViewState["but"] == null)
{
bt.ID = "bt1";
bt.Text = "测试";
bt.arg = "1";
ViewState["but"] = bt;
}
else
bt = ViewState["but"] as oButton;
bt.Click += new EventHandler(bt_Click);
GridView1.HeaderRow.Cells[1].Controls.Add(bt);
}
protected void bt_Click(object sender, EventArgs e)
{
oButton bt = (oButton)sender;
if (bt.arg == "1")
for (int i = 0; i < GridView1.Rows.Count; i++)
{
GridView1.Rows[i].Cells[0].Style.Add("background-color", "red");
bt.arg = "0";
}
else
for (int i = 0; i < GridView1.Rows.Count; i++)
{
GridView1.Rows[i].Cells[0].Style.Add("background-color", "white");
bt.arg = "1";
}
ViewState["but"] = bt;
}
这是重点,重写button类,并继承ISerializable接口,以实现button的可序列化:
[Serializable]
class oButton : Button, System.Runtime.Serialization.ISerializable
{
public string arg;
public oButton() { }
protected oButton(System.Runtime.Serialization.SerializationInfo info,
System.Runtime.Serialization.StreamingContext context)
{
this.ID = info.GetString("id");
this.Text = info.GetString("txt");
this.arg = info.GetString("arg");
}
public void GetObjectData(System.Runtime.Serialization.SerializationInfo info,
System.Runtime.Serialization.StreamingContext context)
{
info.AddValue("id", this.ID);
info.AddValue("txt", this.Text);
info.AddValue("arg", this.arg);
}
}
- 如何防止在Gridview创建的控件在回发后消失
- 如何将文本框中的内容显示在Gridview控件中【DataTable的用法创建行和列】
- 在android中GridView如何在加载的时候自适应子控件元素的高度
- 如何在QML应用中创建类似ContextMenu的控件
- 如何在Swift中创建自定义控件
- 在GridView控件中CheckBoxFiled如何添加复选框
- 如何手工创建Timer控件,并且在Timer控件的事件中控制窗体控件
- 在代码中实现控件消失后另外的控件动画移动到消失控件的位置
- 在gridview控件添加checkbox
- 在Vs2008中创建的用户控件,在工具栏中如何显示
- 激情在漫漫的消失
- 激情在漫漫的消失
- 在GridView分页时,维护CheckBoxes控件的选择状态
- AjaxControlToolKit的ModalPopup控件在GridView中的使用
- 在win8上构建按拼音排序的GridView控件
- 怎样在gridview里添加其他的控件?
- 在控件的创建中触发事件
- 如何在自己创建的类中调用 _default页的控件内容
- Rrd 文档 总结(一)
- 函数式编程另类指南3
- 最全的ASP.NET开源CMS汇总
- jsp 文件上传
- Perl默认变量
- 如何防止在Gridview创建的控件在回发后消失
- JProfiler 配置
- windows mobile 平台显示GIF动态图片
- 现在学晚吗?
- 在线文档展示——M2M最近邻算法论文
- 唉~看看google搜索的两个关键字的结果吧
- 模型驱动开发,传统编程方式的终结?
- .a文件和.lib文件的区别
- php效率高写法