GridView初级自定义应用

主要是自定义“编辑”、“删除”、“更新”等,并且使用datatable作为数据源,不直接连接数据库

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;

public partial class Default5 : System.Web.UI.Page
{
    DataTable dtTemp = new DataTable();
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            databind();//一定要写成一个方法,不然不成功!!!!
        }
    }

    protected void databind()
    {
        DataTable dt = new DataTable();
        string constr = "server=.;uid=sa;pwd=huwei;database=Km";
        string sql = "select * from km_info ";
        SqlConnection conn = new SqlConnection(constr);
        SqlCommand com = new SqlCommand(sql, conn);
        SqlDataAdapter da = new SqlDataAdapter(com);
        da.Fill(dt);
        if (ViewState["dt"] == null)            //判断是内存中是否存在这张表
        {
            ViewState["dt"] = dt;
        }


        GridView1.DataSource = (DataTable)ViewState["dt"]; //让girdview数据源指定内存中的表,而不是读出来的dt,因为页面每次都要刷新,才能正确显示,所有每次都是原来内容,达不到修改后的效果
        GridView1.DataBind();

        Label1.Text = DateTime.Now.ToString();
    }


//点击编辑
    protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
    {
        GridView1.EditIndex = e.NewEditIndex;
        databind();
    }
//点击更新
    protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
//        ScriptManager.RegisterStartupScript(UpdatePanel1, this.GetType(), "a", "alert('" + ((TextBox)GridView1.Rows[GridView1.EditIndex].Cells[2].Controls[0]).Text + "');", true);

        int id = Convert.ToInt32(((TextBox)GridView1.Rows[GridView1.EditIndex].Cells[1].Controls[0]).Text);//获取id行(主键)

        dtTemp = (DataTable)ViewState["dt"];
        dtTemp.PrimaryKey = new DataColumn[] { dtTemp.Columns["km_id"] };//建立一个主键
        DataRow row = dtTemp.Rows.Find(id);//找到主键等于id的行
        row[1] = ((TextBox)GridView1.Rows[GridView1.EditIndex].Cells[2].Controls[0]).Text;

        ViewState["dt"] = dtTemp;

        GridView1.EditIndex = -1;
        databind();

    }
//点击取消
    protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
    {
        GridView1.EditIndex = -1;
        databind();
    }

    //删除
    protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
        ScriptManager.RegisterStartupScript(UpdatePanel1, this.GetType(), "a", "return confirm('确定删除否?');", true);

        int n = e.RowIndex;//获取但前第几行
        string id = GridView1.Rows[n].Cells[1].Text;//找到该行第一列(id)列 也就是主键

        dtTemp = (DataTable)ViewState["dt"];
        dtTemp.PrimaryKey = new DataColumn[] { dtTemp.Columns["km_id"] };//建立一个主键
        DataRow row = dtTemp.Rows.Find(id);//找到主键等于id的行
        dtTemp.Rows.Remove(row);

        ViewState["dt"] = dtTemp;

        databind();
    }

    //绑定数据时,表头显示背景图片
    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.Header)
        {
            e.Row.Attributes.Add("style", "background-image:url('App_Themes\\Office2003 Blue\\GridView\\gvGradient.gif')");
        }
    }

    //分页
    protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        GridView1.PageIndex = e.NewPageIndex;
        databind();
    }

}

posted @ 2007-11-28 13:19  -Enchant  阅读(723)  评论(1编辑  收藏  举报