2024年3月15日发(作者:)
DataGridView的添加、编辑、更新
转载于 太上老君的个人资料
今天说说DataGridView吧,在一个小项目中用到了这个。面对的问题是要在DataGridView
中编辑、更新其中的值,然后怎么回写到数据库中?一开始的想法也是用循环读取Cell,然
后自己手动回写到数据库中,但总觉得不方便,认为微软会把这些工作封装好的,就上网查
了一下,发现确实有这个功能。先描述一下数据库中的结构
表1 表2
ID Name SexID ID Sex
1 A 1 1 男
2 B 2 2 女
3 C 2
一开始的绑定是很容易的,但绑定后更新不了数据库中的值,一更新就提示SexID的值是
没设置数据源的,因为SexID是外键。还好在网上查到了一个折中的解决办法,是在建立
一个DataTable自己做映射:
DataTable dtRelation = new DataTable();
("Code",typeof(byte));
("DisplayString",typeof(string));
(new object[] { 0, "苹果" });
(new object[] { 1, "香蕉" });
(new object[] { 2, "西瓜" });
2.设置下拉列表列(DataGridViewComboxColumn)属性:
下拉列表列.DataSource = dtRelation;
下拉列表列.ValueMember = "Code";
下拉列表列.DisplayMember = "DisplayString";
下拉列表列.DataPropertyName = 数据源.列名;
后来我发现其实不用DataTable也可以直接让DataGridView完成绑定2个表的操作,而且
更新时是可以直接更新的:
SqlDataAdapter da;
SqlCommand cmd;
SqlCommandBuilder cmdBuilder;
DataSet ds;
private void DataBind()
{
da = new SqlDataAdapter(cmd);
cmdBuilder = new SqlCommandBuilder(da);
ds = new DataSet();
(ds, "Students");
nerateColumns = false;
//绑定数据源
urce = ["Students"];
opertyName = ["Students"].Columns[1].ColumnName;
opertyName = ["Students"].Columns[2].ColumnName;
opertyName = ["Students"].Columns[3].ColumnName;
//初始化性别
string sql_Sex = "select * from Sex";
SqlCommand cmd_Sex = new SqlCommand(sql_Sex, );
SqlDataAdapter da_Sex = new SqlDataAdapter(cmd_Sex);
DataSet ds_Sex = new DataSet();
da_(ds_Sex, "Sex");
urce = ds_["Sex"];
yMember = "Value";
ember = "ID";
}
string sqlSTR = "select * from Students";
cmd = new SqlCommand(sqlSTR, );
DataBind();
至此,我们已经成功将DataGridView绑定了2个表,而且不用DataTable做中间层。关键
就在:
DataSource //设定要绑定的数据源
DataPropertyName //设置更新后回写到数据库的哪一列,多表时要把数据
源也写上
DisplayMember //设置要显示在DataGridView的字段
ValueMember //设置对应DisplayMember的实际值的字段
这几个属性上。


发布评论