好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

关于DataGridView控件通过dataset直接更新数据库

今天做了一个小功能,对一个数据库表中的信息直接进行增、删、改操作,用到了DataGridView控件。 功能描述:窗体加载时,查询出表中的内容,并绑定到DataGridView中显示。可以对表中的数据进行增/删、改操作。 开始用到了比较麻烦的方法,为DataGridView添加

今天做了一个小功能,对一个数据库表中的信息直接进行增、删、改操作,用到了DataGridView控件。
功能描述:窗体加载时,查询出表中的内容,并绑定到DataGridView中显示。可以对表中的数据进行增/删、改操作。
  开始用到了比较麻烦的方法,为DataGridView添加了contextMenuStrip,提供了三种方法。比较麻烦。下面是一部分代码:

1 private void 删除ToolStripMenuItem_Click( object sender, EventArgs e)
2 {
3 int [] row = new int [dataGridView1.SelectedRows.Count]; // 存储选定的行的索引号
4 int [] id = new int [dataGridView1.SelectedRows.Count]; // 存储选定行的id号 用于删除时查询的条件
5 int count = dataGridView1.SelectedRows.Count; // 存储开始选定了的行数
6 for ( int j = 0 ; j dataGridView1.SelectedRows.Count; j ++ ) // 利用循环将选定的行索引存入row【】数组中
7 {
8 row[j] = dataGridView1.SelectedRows[j].Index;
9 }
10 for ( int i = 0 ; i count; i ++ ) // 利用循环
11 {
12
13 dataGridView1.CurrentCell = dataGridView1[ 0 , row[i]]; // 设置当前活动的单元格的索引是【0,row【i】】,即所有选定行的第一列的值(Att_Id)
14 id[i] = Convert.ToInt32(dataGridView1.CurrentCell.Value);
15
16 }
17 bool yesno = false ;
18 if (MessageBox.Show( " 确定要删除吗 " , " 删除确认 " ,MessageBoxButtons.OKCancel,MessageBoxIcon.Question) == DialogResult.OK)
19 {
20 for ( int s = 0 ; s count; s ++ )
21 {
22 string sql = " Delete from Attributes where Att_Id=@att_id " ;
23 SqlParameter[] p = new SqlParameter[]{
24 new SqlParameter( " @att_id " ,SqlDbType.Int)};
25 p[ 0 ].Value = id[s];
26 int val = ( int )sqlhelper.delete(sql, p);
27 if (val > 0 )
28 {
29 yesno = true ;
30 }
31 else
32 {
33 yesno = false ;
34 break ;
35 }
36
37 }
38 if (yesno == true )
39 {
40 MessageBox.Show( " 删除成功! " );
41 }
42 databind();
43 }
44 else
45 {
46
47 }
48 }

上面仅仅是删除这一项功能。所以非常麻烦!!

    于是,想到了另一种比较简单而且很直观的方法,利用SqlDataAdapter的update方法,直接在DataGridView中进行编辑(添加新数据、更改数据),只需给删除功能另加个按钮或者弹出菜单,datagridview1.Rows.RemoveAt(dataGridView1.CurrentRow.Index)删除选中行,有一点每种不足就是没删除一条就要点击一下按钮,而第一种方法可以一次性删除多条数据。

View Code

1 private void leixing_Load( object sender, EventArgs e)
2 {
3
4 sqlhelper.conn.Open();
5
6 da = new SqlDataAdapter( " Select Class_Id as '编号',Class_Type as '商品类型' from Class " , sqlhelper.conn);
7 dt = new DataSet();
8 da.Fill(dt, " info " );
9 dataGridView1.DataSource = dt.Tables[ 0 ];
10 // dataGridView1.DataMember = "info";
11 dataGridView1.Columns[ 0 ].Width = 130 ;
12
13
14 sqlhelper.conn.Close();
15
16 }

再添加一个按钮叫做[保存更新] 代码:

这样就实现了全部功能。比较简单。

View Code

1 private void baocun_Click( object sender, EventArgs e)
2 {
3
4
5 if (dt.HasChanges())
6 {
7 SqlCommandBuilder scmb = new SqlCommandBuilder(da);
8 da.Update(dt.Tables[ 0 ]);
9 dt.AcceptChanges();
10 }
11
12
13
14 }

这样做的前提是,数据表必须设定主键。

查看更多关于关于DataGridView控件通过dataset直接更新数据库的详细内容...

  阅读:32次