如何防止在Gridview创建的控件在回发后消失

本文主要讲述如何实现在标题头上放一个按钮上去,按下去选择一整个列的功能。用三种方法演示效果。

 

方法一(较简单):

使用模板列

 

HTML code < asp:GridView ID ="GridView1" runat ="server" AutoGenerateColumns =False Width ="230px" >
   
< Columns >
       
< asp:TemplateField >
           
< HeaderTemplate >
               
< asp:Button ID ="Button1" runat ="server" Text ="全选" OnClick ="Button1_Click" />
           
</ HeaderTemplate >
           
< ItemTemplate >
               
<% # Eval ( " id " ) %>
           
</ ItemTemplate >
       
</ asp:TemplateField >
       
< asp:BoundField DataField ="title" />
   
</ Columns >
</ 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 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
= " 全选 " ;
        }
}

 

 

方法二(中等难度): 在Page_Load中的if (!IsPostBack){}外边动态添加控件

 

 

HTML code < asp:GridView ID ="GridView1" runat ="server"   Width ="230px" OnRowDataBound ="GridView1_OnRowDataBound" >
</ 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();
    }
    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);
    }

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值