首页 > 学院 > 开发设计 > 正文

c# winFrom中 dataGridView控件 在列表内直接编辑数据,然后保存到数据库

2019-11-08 02:31:59
字体:
来源:转载
供稿:网友
自学C#,前几天学到dataGridView控件 学完后 就想知道怎么在列表内直接编辑数据,然后保存到数据库中,就在网上看了看,答案都不是很理想,自己慢慢琢磨然后琢磨了出来   第一次发博客 就像记录自己慢慢成长  有啥不好的还请谅解~
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace MyFirstBlogsContent{    //新建一个UserInfo类 用于转换类型    class UserInfo    {        public int  UserId { get; set; }        public string UserName { get; set; }        public string UserPwd { get; set; }         public int Age { get; set; }     }}
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Data.SqlClient;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;namespace MyFirstBlogsContent{    public partial class Form1 : Form    {        public Form1()        {            InitializeComponent();        }        //连接字符串        PRivate string ConnStr { get; set; }        private void Form1_Load(object sender, EventArgs e)        {            LoadUserInfo();        }        #region 加载数据        private void LoadUserInfo()        {            //得到链接字符串            ConnStr = "server = .;uid = sa;pwd = 1316123;database = MyFirstDb";            //sql脚本            string sqlStr = "select userId, userName, userPwd,Age from UserInfo";            using (SqlDataAdapter adapter = new SqlDataAdapter(sqlStr, ConnStr))            {                DataTable dt = new DataTable();                //把获取到的数据存入dt数据表中                adapter.Fill(dt);                //由于dt是弱类型 所以将它转换成强类型                List<UserInfo> userList = new List<UserInfo>();                //遍历每一行数据                foreach (DataRow dataRow in dt.Rows)                {                    UserInfo userInfo = new UserInfo();                    userInfo.UserId = int.Parse(dataRow["userId"].ToString());                    userInfo.Age = int.Parse(dataRow["Age"].ToString());                    userInfo.UserName = dataRow["userName"].ToString();                    userInfo.UserPwd = dataRow["userPwd"].ToString();                    userList.Add(userInfo);                }                //把数据展示在DataGridView表格中                this.dgvUserInfo.DataSource = userList;            }        }        #endregion               private void dgvUserInfo_CellEndEdit(object sender, DataGridViewCellEventArgs e)        {            //获取选中行的索引            int numHang = this.dgvUserInfo.CurrentRow.Index;            //获取选中行 中 列的索引            int numLie = this.dgvUserInfo.CurrentCell.ColumnIndex;            //获取选中列的Name            string LieName = this.dgvUserInfo.Columns[numLie].Name;            //获得指定行列修改过后值            string strInfo = this.dgvUserInfo.Rows[numHang].Cells[numLie].Value.ToString();            //获得修改行的主键            int userId = int.Parse(this.dgvUserInfo.Rows[numHang].Cells["userId"].Value.ToString());            //sql 脚本            string sqlStr = string.Format("update UserInfo set {0} = {1} where userId = @userId",LieName,"@LieName");            using (SqlConnection conn = new SqlConnection(ConnStr))            {                using (SqlCommand cmd = conn.CreateCommand())                {                    //打开数据连接                    conn.Open();                    cmd.CommandText = sqlStr;                    //赋值                    cmd.Parameters.AddWithValue("@LieName", strInfo);                    cmd.Parameters.AddWithValue("@userId", userId);                    int num = cmd.ExecuteNonQuery();                    MessageBox.Show("修改成功");                }            }            //这里我还无法理解,如果直接调用LoadUserInfo()会报异常 在网上找的这个方法 可我现在还无法理解~            this.BeginInvoke(new MethodInvoker(() =>            {                LoadUserInfo();            }));        }    }}

主要记录自己成长,如有雷同请联系我~~


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表