GridView C#2.0(asp.net)

原创 2007年10月11日 17:58:00

最近在研究gridview实现多行插入,更新,保存,删除的问题;

现在出来了,和大家分享一下;其实也就是对DataTable的操作

谢谢;如果觉得好的话请留言,以后我将继续努力

表:表明aaa

字段 id 主键,自动增长

字段 AAA varchar类型;

字段 BBB varchar类型;

页面代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default3.aspx.cs" Inherits="Default3" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>在GridView中实现数据绑定,添加多行,更新,删除并与数据库实现交互</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <center>
        <asp:GridView ID="GridView1" runat="server" DataKeyNames="id" Style="position: relative" OnRowCancelingEdit="GridView1_RowCancelingEdit" OnRowEditing="GridView1_RowEditing" OnRowUpdating="GridView1_RowUpdating" OnRowDeleting="GridView1_RowDeleting">
            <Columns>
                <asp:CommandField ShowEditButton="True" />
                <asp:CommandField ShowDeleteButton="True" />
            </Columns>
        </asp:GridView>
       
        <asp:Button ID="btnAdd" runat="server" Style="position: relative" Text="保存" OnClick="btnAdd_Click" /><br>
        &nbsp;</center>
    </div>
    </form>
</body>
</html>

C#类代码:

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Data.SqlClient;
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;

public partial class Default3 : System.Web.UI.Page
{
    SqlConnection mysqlcon = new SqlConnection("server=.;database=lianxi;integrated security=SSPI");
    protected DataTable dt = new DataTable();
    protected DataRow dr;//声明行变量
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            if (Session["Table"] == null)
            {
                dt = Tables();//得到DataTable的值
                Session["Table"] = dt;
            }
            else {
                dt=(DataTable)Session["Table"];
            }
            BindGridView();
        }
    }
    protected void BindGridView()
    {
        //将数据与GridView1进行绑定
        if (dt != null)
        {
            try
            {
                GridView1.DataSource = dt;
                GridView1.DataBind();
                GridView1.HeaderRow.Cells[2].Text = "工号";
                GridView1.HeaderRow.Cells[3].Text = "姓名";
                GridView1.HeaderRow.Cells[4].Text = "年龄";
            }
            catch (SqlException)
            {
                Response.Write("<script language='javascript'>alert('出错了!!!');</script>");
            }
        }
        else {
            Response.Write("没有你要的数据");
        }
    }

    protected DataTable Tables()
    {
        //将数据保存到DataTable中
        try
        {
            string sql = "select * from aaa";
            SqlDataAdapter da = new SqlDataAdapter(sql, mysqlcon);
            da.Fill(dt);
            dr = dt.NewRow();//为DataTable添加一行(空值 以实现添加功能)
            dt.Rows.Add(dr);
            Session["Table"] = dt;//将dt保存在session中
        }
        catch (SqlException)
        {
        }
        return dt;
    }
    protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
    {
        //点击编辑后执行
        GridView1.EditIndex = e.NewEditIndex;
        dt = (DataTable)Session["Table"];
        BindGridView();
    }
    protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
    {
        //取消编辑时执行
        GridView1.EditIndex = -1;
        dt = (DataTable)Session["Table"];
        BindGridView();
    }
    protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        //更新dt事执行
        if (e.RowIndex == (GridView1.Rows.Count - 1))//判断选定的行是不是页面中GridView的最后一行,当是最后一行是执行
        {
            //为dt添加一新行
            string aaa = ((TextBox)GridView1.Rows[e.RowIndex].Cells[3].Controls[0]).Text.Trim();
            string bbb = ((TextBox)GridView1.Rows[e.RowIndex].Cells[4].Controls[0]).Text.Trim();
            dt = (DataTable)Session["Table"];
            dt.Rows.RemoveAt(e.RowIndex);//删除空行
            dr = dt.NewRow();
            dr[1] = aaa;
            dr[2] = bbb;
            dt.Rows.Add(dr);
            dr = dt.NewRow();//在次为dt添加空行以实现页面再次添加新行
            dt.Rows.Add(dr);
            Session["Table"] = dt;
            GridView1.EditIndex = -1;
            BindGridView();

        }
        else {
            //更新dt中现有行事执行
            string aaa = ((TextBox)GridView1.Rows[e.RowIndex].Cells[3].Controls[0]).Text.Trim();
            string bbb = ((TextBox)GridView1.Rows[e.RowIndex].Cells[4].Controls[0]).Text.Trim();
            dt = (DataTable)Session["Table"];
            dr = dt.Rows[e.RowIndex];

            dr.BeginEdit();//开始更新
            dr[1] = aaa;
            dr[2] = bbb;
            dr.EndEdit();//结束更新

            Session["Table"] = dt;
            GridView1.EditIndex = -1;
            BindGridView();
        }
       
    }


    protected bool Executer(string sql)
    {
        //SQL执行语句,实现数据库的更新,添加,删除
        SqlCommand mysqlcom = new SqlCommand(sql,mysqlcon);
        try {
            mysqlcon.Open();
            mysqlcom.ExecuteNonQuery();
            return true;
        }
        catch (SqlException) {
            return false;
        }
        finally {
            mysqlcom.Dispose();
            mysqlcon.Close();
        }
    }
    protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
        //点击删除事执行
        dt = (DataTable)Session["Table"];
        if (e.RowIndex == (GridView1.Rows.Count - 1))//判断:当点击GridView中的最后一行时(最后一行是空值)不执行删除
        {
        }else if(GridView1.Rows[e.RowIndex].Cells[2].Text.Trim()!=null){
            if (Session["aaa_id"] != null)//当删除掉的数据是数据库中原有的数据时执行,将原有数据的id保存到session中
            {
                Session["aaa_id"] += GridView1.Rows[e.RowIndex].Cells[2].Text.Trim();
            }
            else {
                Session["aaa_id"] = GridView1.Rows[e.RowIndex].Cells[2].Text.Trim();
            }
            dt.Rows.RemoveAt(e.RowIndex);
            Session["Table"] = dt;
            GridView1.EditIndex = -1;
            BindGridView();
        }
        else {
            //删除后来添加到dt中的数据(此时还未与数据库进行交互)
            dt.Rows.RemoveAt(e.RowIndex);
            Session["Table"] = dt;
            GridView1.EditIndex = -1;
            BindGridView();
        }
    }
    protected void btnAdd_Click(object sender, EventArgs e)
    {
        dt = (DataTable)Session["Table"];
        foreach (DataRow drs in dt.Rows)
        {
            if (drs[0].ToString().Trim() != string.Empty)//判断dt中的id是否存在,如果存在则执行以下代码
            {
                //string id = drs["id"].ToString().Trim();
                //int i = int.Parse(id);
                //string aaa = drs["AAA"].ToString().Trim();
                //string bbb = drs["BBB"].ToString().Trim();
                string sql = string.Format("update aaa set AAA='" + drs["AAA"].ToString().Trim() + "',BBB='" + drs["BBB"].ToString().Trim() + "' where id=" + int.Parse(drs["id"].ToString().Trim()));
                Executer(sql);
            }
                //当dt中的id是空值是,判断后面的数据是否是空值,如为空值则不添加到数据库
            else if (drs[1].ToString() != string.Empty && drs[2].ToString() != string.Empty) 
            {
                //string aaa = drs[1].ToString();
                //string bbb = drs[2].ToString();
                string sql = "insert into aaa values('" + drs["AAA"].ToString().Trim() + "','" + drs["BBB"].ToString().Trim() + "')";
                Executer(sql);
            }
        }
        Session.Remove("Table");//保存完毕后则请空session["Table"]

        if (Session["aaa_id"] != null)
        {
            string aaa_id = Session["aaa_id"].ToString().Trim();//取出session["aaa_id"]的值
            for (int i = 0; i < aaa_id.Length; i++)
            {
                //将得到id的值
                int id = Convert.ToInt32(aaa_id.Substring(i,1));
                string sql = string.Format("delete aaa where id=" + id);//删除数据库中原有的数据
                Executer(sql);
            }
        }
        Session.Remove("aaa_id");//保存完毕后则请空session["aaa_id"]
        Response.Redirect("Default3.aspx");//跳转页面
    }
}

 

ASP.NET—014:Gridview复合表头

继续看一个简单的ASP.NET应用。Gridview相信大家使用的比较多了,一般对多行数据进行展示和操作都会用到这个控件。而对于表头,也是很重要的一部分,它负责对数据进行分门别类的。而对于复合表头该如...
  • yysyangyangyangshan
  • yysyangyangyangshan
  • 2014年08月25日 00:31
  • 4039

ASP.NET中GridView控件删除数据的两种方法

今天在用GridView控件时,发现了一个问题,就是使用GridView控件在删除数据时的问题。接下来我们通过模板列方式和CommandField方式删除某条数据讲解下两者之间的区别。    方式一...
  • jiangfei009003
  • jiangfei009003
  • 2013年07月24日 17:44
  • 2567

asp.net gridview中添加checkbox列,用于全部选中记录或取消全选

方法一:使用javascript代码控制                          前台代码:...
  • nvhaixx
  • nvhaixx
  • 2013年10月08日 14:03
  • 4583

Asp.Net总结(三)GridView

由于Asp.Net视频比较旧,涉及到的数据绑定控件DataGrid在VS2012中已经没有了,取而代之的是GridView。开始觉得视频中的例子没法实现了,其实不然,DataGrid里面的功能Grid...
  • wangyajin333
  • wangyajin333
  • 2014年02月19日 14:11
  • 1217

ASP.NET GridView 后台绑定行点击行触发SelectedIndexChanged,页面刷新后,只有一页的情况下,事件只触发一次

如题,刚接触asp.net不久,项目需要用到
  • u014727472
  • u014727472
  • 2014年05月24日 22:06
  • 1071

Asp.net中GridView使用详解(引)

GridView无代码分页排序 GridView选中,编辑,取消,删除 GridView正反双向排序 GridView和下拉菜单DropDownList结合 GridView和CheckBox...
  • yingzhaom
  • yingzhaom
  • 2016年01月31日 14:19
  • 10788

asp.net gridview多行标题合并(通用)

效果图 前台代码 后台代码
  • nvhaixx
  • nvhaixx
  • 2016年11月25日 14:29
  • 755

ASP.NET中GridView实现行鼠标滑过及选择变色

一、 复制去Google翻译翻译结果
  • u010568463
  • u010568463
  • 2015年04月02日 18:43
  • 874

ASP.NET——GridView控件绑定数据

ASP.NET提供了许多种数据服务器控件,用于在Web页面中显示数据库中的表数据,GridView控件就是其中之一。这个控件和我们以前学过的DataGridView控件几乎是一样的,所以对GridVi...
  • zjx86320
  • zjx86320
  • 2014年07月25日 15:42
  • 12974

Asp.net中,点击GridView表头实现数据的排序

一、实现该功能的基本工作。 1、  先添加一个GridView,取名为gvData。 2、  设置该控件的属性: 操作步骤如下。 设置属性:    ...
  • hxj135812
  • hxj135812
  • 2014年03月10日 10:57
  • 7176
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:GridView C#2.0(asp.net)
举报原因:
原因补充:

(最多只允许输入30个字)