DataGridView的添加、编辑、更新

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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();

dtRelation.Columns.Add("Code",typeof(byte));

dtRelation.Columns.Add("DisplayString",typeof(string));

dtRelation.Rows.Add(new object[] { 0, "苹果" });

dtRelation.Rows.Add(new object[] { 1, "香蕉" });

dtRelation.Rows.Add(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();

da.Fill(ds, "Students");

dataGridView1.AutoGenerateColumns = false;

//绑定数据源

dataGridView1.DataSource = ds.Tables["Students"];

Column1.DataPropertyName = ds.Tables["Students"].Columns[1].ColumnName;

Column2.DataPropertyName = ds.Tables["Students"].Columns[2].ColumnName;

Column3.DataPropertyName = ds.Tables["Students"].Columns[3].ColumnName;

//初始化性别

string sql_Sex = "select * from Sex";

SqlCommand cmd_Sex = new SqlCommand(sql_Sex, Main.Conn);

SqlDataAdapter da_Sex = new SqlDataAdapter(cmd_Sex);

DataSet ds_Sex = new DataSet();

da_Sex.Fill(ds_Sex, "Sex");

Column3.DataSource = ds_Sex.Tables["Sex"];

Column3.DisplayMember = "Value";

Column3.ValueMember = "ID";

}

string sqlSTR = "select * from Students";

cmd = new SqlCommand(sqlSTR, Main.Conn);

DataBind();

至此,我们已经成功将DataGridView绑定了2个表,而且不用DataTable做中间层。关键就在:

DataSource //设定要绑定的数据源

DataPropertyName //设置更新后回写到数据库的哪一列,多表时要把数据源也写上

DisplayMember //设置要显示在DataGridView的字段

ValueMember //设置对应DisplayMember的实际值的字段

这几个属性上。

在更新回数据源时还有一点要注意,就是绑定数据源时一定要有主键,这样你只要设置SqlDataAdapter中的SelectCommand属性,其余的UpdateCommand、DeleteCommand、InsertCommand属性就会自动设置、并完成相应的功能:

try

{

da.Update(ds.Tables[0].GetChanges());

MessageBox.Show("数据处理成功!");

ds.Tables[0].AcceptChanges();

}

catch (Exception Error)

{

MessageBox.Show(Error.Message,);

}

举一反三、能成功绑定2个表,也一样可以绑定多个表!

相关文档
最新文档