• DataRowState、AcceptChanges、RejectChanges综合使用示例:实现DataGridView数据的增、删、改


    下面的示例中,通过一个程序,演示使用DataRowState、AcceptChanges、RejectChanges,实现DataGridView数据的增、删、改。

    一、界面设计

    二、代码实现

      1 using System;
      2 using System.Collections.Generic;
      3 using System.ComponentModel;
      4 using System.Data;
      5 using System.Drawing;
      6 using System.Linq;
      7 using System.Text;
      8 using System.Threading.Tasks;
      9 using System.Windows.Forms;
     10 using System.Data;
     11 using System.Data.SqlClient;
     12 using System.Configuration;
     13 
     14 namespace DataRowStateDemo
     15 {
     16     public partial class FrmMain : Form
     17     {
     18         public FrmMain()
     19         {
     20             InitializeComponent();
     21         }
     22                                
     23         //连接字符串
     24         string strConn = ConfigurationManager.ConnectionStrings["DbConn"].ConnectionString;
     25 
     26         /// <summary>
     27         /// 加载
     28         /// </summary>
     29         /// <param name="sender"></param>
     30         /// <param name="e"></param>
     31         private void btn_LoadData_Click(object sender, EventArgs e)
     32         {
     33             Initdgv();
     34             this.btn_Add.Visible = false;
     35         }
     36 
     37         /// <summary>
     38         /// 初始化DataGridView
     39         /// </summary>
     40         private void Initdgv()
     41         {
     42             SqlConnection conn = new SqlConnection(strConn);
     43             string strSQL = "select * from Users";
     44             SqlCommand cmd = new SqlCommand(strSQL, conn);
     45             SqlDataAdapter adapter = new SqlDataAdapter(cmd);
     46             DataSet dsDgv = new System.Data.DataSet();
     47             try
     48             {
     49                 conn.Open();
     50                 //填充数据
     51                 adapter.Fill(dsDgv);
     52 
     53                 this.dgv_Demo.DataSource = dsDgv.Tables[0];
     54                 //不显示最后的空行
     55                 this.dgv_Demo.AllowUserToAddRows = false;
     56                 // 设置第一列只读
     57                 this.dgv_Demo.Columns[0].ReadOnly = true;
     58             }
     59             catch (Exception ex)
     60             { }
     61             finally
     62             {
     63                 conn.Close();
     64             }
     65         }
     66 
     67         /// <summary>
     68         /// 编辑
     69         /// </summary>
     70         /// <param name="sender"></param>
     71         /// <param name="e"></param>
     72         private void btn_Edit_Click(object sender, EventArgs e)
     73         {
     74             this.dgv_Demo.AllowUserToAddRows = true;
     75         }
     76 
     77         /// <summary>
     78         /// 保存
     79         /// </summary>
     80         /// <param name="sender"></param>
     81         /// <param name="e"></param>
     82         private void btn_Save_Click(object sender, EventArgs e)
     83         {
     84             DataTable dtCopy = this.dgv_Demo.DataSource as DataTable;
     85             DataSet dsUsers = new DataSet();
     86 
     87             //产生与表Users结构相同的空表
     88             DataTable dtAdd = GetEmptyTable();
     89             DataTable dtEdit = GetEmptyTable();
     90             DataTable dtDel = GetEmptyTable();
     91 
     92             //根据DataRowState的状态获取新增、修改、删除的表数据
     93             dtAdd = dtCopy.GetChanges(DataRowState.Added);
     94             dtEdit = dtCopy.GetChanges(DataRowState.Modified);
     95             dtDel = dtCopy.GetChanges(DataRowState.Deleted);
     96 
     97             //新增
     98             if (dtAdd != null)
     99             {
    100                 dtAdd.TableName = "Added";
    101                 dsUsers.Tables.Add(dtAdd);
    102             }
    103             //修改
    104             if (dtEdit != null)
    105             {
    106                 dtEdit.TableName = "Edit";
    107                 dsUsers.Tables.Add(dtEdit);
    108             }
    109             //删除
    110             if (dtDel != null)
    111             {
    112                 dtDel.TableName = "Del";
    113                 dtDel.RejectChanges();
    114                 dsUsers.Tables.Add(dtDel);
    115             }
    116             //保存数据
    117             if (SaveUser(dsUsers))
    118             {
    119                 MessageBox.Show("保存成功!");
    120                 //重新加载数据
    121                 Initdgv();
    122             }
    123             else
    124             {
    125                 MessageBox.Show("保存失败!");
    126             }
    127         }
    128 
    129         /// <summary>
    130         /// 根据表结构产生空表
    131         /// </summary>
    132         /// <returns></returns>
    133         private DataTable GetEmptyTable()
    134         {
    135             DataTable dtTable = new DataTable("Users");
    136             //使用集合初始化器添加列
    137             dtTable.Columns.AddRange(new DataColumn[]{
    138                    new DataColumn("UserID",typeof(Int32)),
    139                    new DataColumn("UserName",typeof(string)),
    140                    new DataColumn("Password",typeof(string)),
    141                    new DataColumn("Sex",typeof(Char)),
    142                    new DataColumn("Birthday",typeof(DateTime))
    143             });
    144             return dtTable;
    145         }
    146 
    147         /// <summary>
    148         /// 保存数据
    149         /// </summary>
    150         /// <param name="ds"></param>
    151         /// <returns></returns>
    152         private bool SaveUser(DataSet ds)
    153         {
    154             bool tf = false;
    155             //新增
    156             if (ds.Tables["Added"] != null)
    157             {
    158                 foreach (DataRow dr in ds.Tables["Added"].Rows)
    159                 {
    160                    tf= InsertUser(dr);
    161                 }
    162             }
    163             //修改
    164             if (ds.Tables["Edit"] != null)
    165             {
    166                 foreach (DataRow dr in ds.Tables["Edit"].Rows)
    167                 {
    168                     tf = UpdateUser(dr);
    169                 }
    170             }
    171             //删除
    172             if (ds.Tables["Del"] != null)
    173             {
    174                 foreach (DataRow dr in ds.Tables["Del"].Rows)
    175                 {
    176                     tf = DeleteUser(dr);
    177                 }
    178             }
    179             return tf;
    180         }
    181 
    182         /// <summary>
    183         /// 数据库增加
    184         /// </summary>
    185         /// <param name="drDataRow"></param>
    186         /// <returns></returns>
    187         private bool InsertUser(DataRow drDataRow)
    188         {
    189             string strSQL = string.Format(@"insert into users values('{0}','{1}','{2}','{3}')", drDataRow["UserName"].ToString(), drDataRow["Password"].ToString(), 
    drDataRow["Sex"].ToString(), drDataRow["Birthday"].ToString()); 190 return ExecuteSQL(strSQL); 191 } 192 193 /// <summary> 194 /// 数据库删除 195 /// </summary> 196 /// <param name="drDataRow"></param> 197 /// <returns></returns> 198 private bool DeleteUser(DataRow drDataRow) 199 { 200 string strSQL = string.Format("delete from users where UserID='{0}'", Convert.ToInt32(drDataRow["UserID"].ToString())); 201 return ExecuteSQL(strSQL); 202 } 203 204 /// <summary> 205 /// 数据库修改 206 /// </summary> 207 /// <param name="drDataRow"></param> 208 /// <returns></returns> 209 private bool UpdateUser(DataRow drDataRow) 210 { 211 string strSQL = string.Format("update users set UserName='{0}',Password='{1}',Sex='{2}',Birthday='{3}' where UserID='{4}'", 212 drDataRow["UserName"].ToString(), drDataRow["Password"].ToString(), drDataRow["Sex"].ToString(), 213 drDataRow["Birthday"].ToString(), Convert.ToInt32(drDataRow["UserID"].ToString())); 214 return ExecuteSQL(strSQL); 215 } 216 217 /// <summary> 218 /// 数据库执行SQL语句 219 /// </summary> 220 /// <param name="strSQL"></param> 221 /// <returns></returns> 222 private bool ExecuteSQL(string strSQL) 223 { 224 bool tfResult = false; 225 SqlConnection conn = new SqlConnection(strConn); 226 SqlCommand cmd = new SqlCommand(strSQL, conn); 227 try 228 { 229 conn.Open(); 230 tfResult= cmd.ExecuteNonQuery().Equals(1); 231 } 232 catch (Exception ex) 233 { } 234 finally 235 { 236 conn.Close(); 237 } 238 239 return tfResult; 240 } 241 242 /// <summary> 243 /// 删除 244 /// </summary> 245 /// <param name="sender"></param> 246 /// <param name="e"></param> 247 private void btn_Del_Click(object sender, EventArgs e) 248 { 249 if (this.dgv_Demo.SelectedRows.Count <= 0) 250 { 251 MessageBox.Show("请先选择要删除的行"); 252 } 253 else 254 { 255 foreach(DataGridViewRow dr in this.dgv_Demo.SelectedRows) 256 { 257 //只是删除DataGridView中显示的数据,并没有删除数据库中的数据 258 this.dgv_Demo.Rows.Remove(dr); 259 } 260 261 } 262 } 263 264 /// <summary> 265 /// 增加空行 266 /// </summary> 267 /// <param name="sender"></param> 268 /// <param name="e"></param> 269 private void btn_Add_Click(object sender, EventArgs e) 270 { 271 //DataGridView没有绑定数据时才可以使用Add()方法增加空行 272 this.dgv_Demo.Rows.Add(); 273 } 274 275 private void FrmMain_Load(object sender, EventArgs e) 276 { 277 this.dgv_Demo.AllowUserToAddRows = false; 278 } 279 } 280 }
  • 相关阅读:
    js输出
    mysql主从同步(4)-Slave延迟状态监控
    mysql主从同步(3)-percona-toolkit工具(数据一致性监测、延迟监控)使用梳理
    【故障】MySQL主从同步故障-Slave_SQL_Running: No
    什么是bgp线路
    F5负载均衡虚拟服务器配置FTP端口访问不了
    Python 拷贝对象(深拷贝deepcopy与浅拷贝copy)
    东风本田/XR-V/2017款
    mysqldump导出数据库导入数据库
    .htaccess设置301跳转及常用技巧整理
  • 原文地址:https://www.cnblogs.com/dotnet261010/p/6681841.html
Copyright © 2020-2023  润新知