• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

飞翔的狮子

天行健,君子以自强不息;地势坤,君子以厚德载物。
  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

实现GridView的插入功能

一、引言

  GridView控件本身没有插入功能,然而,我们可以另辟蹊径,使之具有插入的功能。本文通过一个简单的Demo,讲述了一种实现插入的方法。该Demo中GridView相关的操作全部用后台代码实现,而不是用DataSource控件。

二、项目使用的数据库

  使用的数据库非常简单,一张用户表User和角色表Role,直接copy SQL代码了:

Demo数据库代码
 1 CREATE TABLE [Role] (
 2     RoleID INT IDENTITY PRIMARY KEY,
 3     [Name] VARCHAR(20) NOT NULL
 4 )
 5 CREATE TABLE [User] (
 6     UserID INT IDENTITY PRIMARY KEY,
 7     [Name] NCHAR(20) UNIQUE NOT NULL,
 8     Password CHAR(32) NOT NULL,
 9     Gender CHAR(1) NOT NULL,
10     RoleID INT NOT NULL
11     CONSTRAINT FK_User_Role FOREIGN KEY(RoleID) REFERENCES [Role](RoleID)
12 )

三、Demo设计

  1、直接贴截图了。界面很简单,对GridVeiw启用了分页和排序功能。

  2、后台代码中插入按钮的Click事件代码为:

代码
 1 protected void btn_Insert_Click(object sender, EventArgs e)
 2 {
 3    //取出需要的视图dv。考虑到这只是简单Demo,就不分层写了,代码全写成一坨了。
 4    SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["connStr"].ConnectionString);
 5    string command = "SELECT [User].*, [Role].[Name] FROM [User] JOIN [Role] ON [User].RoleID = [Role].RoleID";
 6    connection.Open();
 7    SqlDataAdapter dataAdapter = new SqlDataAdapter(command, connection);
 8    DataSet dataSet = new DataSet();
 9    dataAdapter.Fill(dataSet);
10    DataView dv = dataSet.Tables[0].DefaultView;
11 
12    //进行排序
13    if (ViewState["Direction"] != null && ViewState["Expression"] != null)
14       dv.Sort = ViewState["Expression"].ToString() + " " + ViewState["Direction"].ToString();
15 
16    DataTable dt = dv.ToTable(); //排序后的视图转化为表dt
17    DataRow dr = dt.NewRow();
18    dt.Rows.InsertAt(dr, 0);//把new出来的新行插入在表的第一行
19    dv = dt.DefaultView; //再把表转化为视图
20 
21    //GridView名字这里是gv
22    gv.EditIndex = 0;
23    gv.PageIndex = 0;
24    gv.DataSource = dv;
25    gv.DataKeyNames = new string[] { "UserID" };
26    gv.DataBind();
27 
28    //下面这句注意了:原来GridView处于编辑状态的话,button上默认不是显示 '增加' 而是 '编辑',这里改下。
29    (gv.Rows[0].Cells[4].Controls[0] as LinkButton).Text = "增加";
30 }

 3、然后在GridView的Updating事件里面写代码,里面需要插入状态的代码,下面给出代码:

代码
 1 protected void gv_RowUpdating(object sender, GridViewUpdatedEventArgs e)
 2 {
 3    //确定是否处于插入状态
 4    bool IsInsert = (gv.Rows[0].Cells[4].Controls[0] as LinkButton).Text == "增加" ? true : false;
 5 
 6    //因为这个Demo有性别和角色,所以用到了RadioButtonList和DropDownList,这里取到控件。
 7    RadioButtonList rbl = gv.Rows[e.RowIndex].FindControl("rbl_Gender") as RadioButtonList;
 8    DropDownList ddl = gv.Rows[e.RowIndex].FindControl("ddl_RoleName") as DropDownList;
 9 
10    //下面确定需要插入或者编辑的字段
11    string userId = IsInsert ?
12        (gv.Rows[0].FindControl("txt_UserId") as TextBox).Text.Trim() :
13        gv.DataKeys[0]["UserId"].ToString();
14    string name = (gv.Rows[e.RowIndex].FindControl("txt_Name") as TextBox).Text.Trim(); //错误1 cells[0-1]
15    string gender = rbl.SelectedItem.Value;
16    string password = "123"; //插入新的用户时,默认密码为123
17    int roleId = Convert.ToInt32(ddl.SelectedItem.Value);
18 
19    //以下进行插入或者编辑操作,因为原本是三层架构的Demo,所以这里就不写一坨了,本文重点也不在这里。
20    if (IsInsert)
21    {
22       UserEntity user = new UserInfo(userId, name, gender, password, roleId);
23       user.InsertUser(user);
24    }
25    else
26    {
27       UserEntity user = new UserEntity(userId);
28       user.Name = name;
29       user.Gender = gender;
30       user.RoleId = roleId;
31       user.UpdateUser(user);
32    }
33 
34    gv.EditIndex = -1;
35    gv_DataBind(); //调用自定义的事件绑定函数
36 }

5、下面给出编辑和插入时的截图: 

 

  至此,最终要的两个部分都给出了。也就表达了本文的意思了:用这种方法实现GridView的插入功能。 

posted on 2010-02-06 22:38  飞翔的狮子  阅读(4086)  评论(1)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3