DevExpress 使用 GridControl 更改表格数据更新到数据库中表

直接编辑GridControl单元格中的内容,点击保存按钮将数据保存到数据库表中,怎样实现呢?

    public partial class StudentInfo : Form
    {
        //定义数据
        class StudentData
        {
            //变量名就为标题
            public string 姓名 { get; set; }
            public string 性别 { get; set; }
            public int 年龄 { get; set; }

            private List<OtherData> listOtherDatas = new List<OtherData>();
            public List<OtherData> ListOtherDatas { get => listOtherDatas; set => listOtherDatas = value; }
        }
        class OtherData
        {
            public string 家庭地址 { get; set; }
            public string 电话 { get; set; }
        }
        List<StudentData> list = new List<StudentData>();
        //赋值数据
        void InfoData()
        {
            StudentData sd1 = new StudentData();
            sd1.姓名 = "张三";
            sd1.性别 = "男";
            sd1.年龄 = 17;
            //这里可以添加多条数据
            OtherData od1 = new OtherData();
            od1.家庭地址 = "甘肃省兰州市";
            od1.电话 = "1534361**55";
            sd1.ListOtherDatas.Add(od1);
            list.Add(sd1);

            StudentData sd2 = new StudentData();
            sd2.姓名 = "李四";
            sd2.性别 = "女";
            sd2.年龄 = 16;

            OtherData od2 = new OtherData();
            od2.家庭地址 = "广西省南宁市";
            od2.电话 = "1557892**30";
            sd2.ListOtherDatas.Add(od2);
            list.Add(sd2);
        }
        public StudentInfo()
        {
            InitializeComponent();
            InfoData();
            **//绑定数据到表格**
            gridControl1.DataSource = list;
        }
        //保存数据
        private void Sava_StudentInfo(object sender, EventArgs e)
        {
            //关闭编辑状态并更新
            this.gridView1.CloseEditor();
            this.gridView1.UpdateCurrentRow();

            //子表格输入状态,我不会关闭,只能换下焦点,有谁知道解决方法,求告知。
            gridView1.Focus();

            //tmp里面就保存的表格当前的数据
            List<StudentData> tmp = gridControl1.DataSource as List<StudentData>;

            //可以通过下面的循环得到数据。
            for (int i = 0; i < tmp.Count; i++)
            {      
                string name = tmp[i].姓名;
                for (int k = 0; k < tmp[i].ListOtherDatas.Count; k++)
                {
                    string location = tmp[i].ListOtherDatas[k].家庭地址;
                }    
            }
        }
    }

详细讲解

https://blog.csdn.net/weixin_56125200/article/details/116589817

尝试下面方法来解决:

Demo代码如下:

 private void gv_supplier_CellValueChanged(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e)
        {
            var dr = this.gv_supplier.GetDataRow(this.gv_supplier.FocusedRowHandle);//这个就是获取这一行数据
            string sql = string.Empty;
            List<SqlParameter> param = new List<SqlParameter>();
            string id = dr.ItemArray[0].ToString();
            string supplier_name = dr.ItemArray[1].ToString();//要修改的数据
             if (id != "0")//这个判断是因为如果不是0就是修改,0是新增我要用别的方法来写
            {
                sql = @" UPDATE [dbo].[表名称]
                                SET [supplier_name] = @supplier_name
                              WHERE id=@id";

                param.Add(new SqlParameter { ParameterName = "@id", Value = id, SqlDbType = SqlDbType.BigInt });
                param.Add(new SqlParameter { ParameterName = "@supplier_name", Value = supplier_name, SqlDbType = SqlDbType.NVarChar, Size = 100 });
            }
            else{return;}
            int result = DbHelper.ExecuteSql(sql, param.ToArray());//存数据库
            if (result <= 0)
            {
                XtraMessageBox.Show("保存出错,供应商名称:" + supplier_name + "");
                return;
            }

具体的步骤可参考链接:

除此之外,
如果第一次更新成后,第二次更新失败的话,
请尝试进行下面修改

在重新给gridcontrol.datasource赋值前,把里面的gridview使用gridView1.Columns.Clear();这个放吧,将试图的列名清空就OK了

参考链接:


如有问题及时沟通

使用Dgvsave的datagridviewsave方法
https://blog.csdn.net/c___novice/article/details/109516942?spm=1035.2023.3001.6557&utm_medium=distribute.pc_relevant_bbs_down_v2.none-task-blog-2~default~OPENSEARCH~Rate-3-109516942-bbs-390598000.pc_relevant_bbs_down_cate&depth_1-utm_source=distribute.pc_relevant_bbs_down_v2.none-task-blog-2~default~OPENSEARCH~Rate-3-109516942-bbs-390598000.pc_relevant_bbs_down_cate