直接编辑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了
如有问题及时沟通