Vs2005GridView中的CommandField

来源:互联网 发布:网络摄像头ip不知道 编辑:程序博客网 时间:2024/06/05 13:28

在GridView中经常要用到比如删除,选择,编辑等命令,下面我就来详细说明各个功能的实现:

首先加入一个GridView控件,设置其属性:

1.在Columns中添加CommandField列如:Delete;Select;Edit,Update,Cancel三列.

2.DataKeyNames添加需要绑定表的主键(最好选择它),以便在后面的程序中使用该值.

其它的属性就先不设置了,因为已经够用了.哈哈...

现在就来具体实现吧.

首先,我使用SQL Server2000中的NorthWind数据库.先写一个绑定数据的函数

 public void BindData()             //用来绑定数据到GridView
    {
        SqlConnection con = DB.createConnection();
        con.Open();
        SqlDataAdapter ada = new SqlDataAdapter("select employeeID,LastName,FirstName from Employees", con);
        DataSet ds = new DataSet();
        ada.Fill(ds);
        this.GridView1.DataSource = ds;
        this.GridView1.DataBind();
    }

现在写编辑按钮的事件,当然要先在GridView中添加RowEditing事件:

protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
    {
        this.GridView1.EditIndex = e.NewEditIndex;            
        BindData();
    }

页面现在可以编辑了,编辑之后保存到数据库里面,这一段比较关键主要是要获取被编辑行的主键值,以及要获得更新的值.添加RowUpdating事件:

protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        int i = this.GridView1.EditIndex; //e.RowIndex是当前被选中的行号.
        string firstName = ((TextBox)(GridView1.Rows[i].Cells[5].Controls[0])).Text.ToString(); 
        DataKey key = this.GridView1.DataKeys[e.RowIndex];   //key是个数组,前提是要在属性DataKeyNames中设置数据库字段,通常是选主键.    
        int id = int.Parse(key[0].ToString());//key[]就可以取得字段对应的值               
        /*
         * 连接数据库,提交更新的资料
        */
        SqlConnection uptCon = DB.createConnection();
        uptCon.Open();
        SqlCommand cmd = new SqlCommand("update employees set FirstName='" + firstName + "' where employeeID=" + id,uptCon);
        cmd.ExecuteNonQuery();
        Response.Write("<script>alert('更新成功!')</script>");

        //回到编辑页面,准备下一次的修改
        this.GridView1.EditIndex = -1;
        BindData();
    }

随便选择一行进行编辑,然后点击更新,现在数据就可以更新了哦,哈哈...成功了!

最后,如果我们不想更新了呢?此时就要Cancel了,同样添加RowCancelingEdit事件

protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
    {
        this.GridView1.EditIndex = -1;
        BindData();
    }   

到此,关于Edit,Update,Cancel事件已经全部实现了,如果要实现Delete就添加RowDeleting事件,代码与Update事件类似,主要的是获得选定行的主键,因为有了主键才方便操作数据库.

我有一点不明白的是RowUpdated事件是什么时候触发的?与RowUpdating有什么关联吗?上面的例子没有用它也实现了功能(井底之见),我学到了再写它的作用.