绑定数据库更新问题.
请指教, 不好意思内容有点多. 先谢谢了.
有两个表Employees, Relatives
Employees有3个字段 eID, eName
Relatives有3个字段 rID, eID, rName
一个雇员(Employee)有0个或多个亲属(Relative)
其中Relatives中的eID是Employees的处键,且on update cascade on delete cascade
现在有一个form, textBox1绑定到Employees.eID, textBox2绑定到Employees.eName
dataGridView1绑定到Relatives表.
//绑定数据
DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter();
BindingSource bs;
BindingSource bs2;
da.SelectCommand = new SqlCommand("select * from Employees", _conn);
da.Fill(ds, "Employees");
da.SelectCommand = new SqlCommand("select * from Relatives", _conn);
da.Fill(ds, "Relatives");
ds.Relations.Add(ds.Tables["Employees"].Columns["eID"], ds.Tables["Relatives"].Columns["eID"]);
bs = new BindingSource(ds, "Employees");
bs.Filter = "eID = '" + eIDString + "'";
textBox1.DataBindings.Add("Text", bs, "eID");
textBox2.DataBindings.Add("Text", bs, "eName");
bs2 = new BindingSource(ds, "Relatives");
bs2.Filter = "eID = '" + eIDString + "'";
dataGridView1.DataSource = bs2;
//更新数据
//更新Employees
da.UpdateCommand = new SqlCommand("update Employees Set eID = @eID, eName = @eName where eID = @eIDOriginal", _conn);
da.UpdateCommand.Parameters.Add("@eID", SqlDbType.Char, 6, "eID");
da.UpdateCommand.Parameters.Add("@eName", SqlDbType.NVarChar, 20, "eName");
da.UpdateCommand.Parameters.Add("@eIDOriginal", SqlDbType.Char, 6, "eID");
da.UpdateCommand.Parameters["@eIDOriginal"].SourceVersion = DataRowVersion.Original;
bs.EndEdit();
da.Update(ds, "Employees");
//更新Relatives
da.UpdateCommand = new SqlCommand("update Relatives Set rName = @rName where rID = @rIDOriginal", _conn);
da.UpdateCommand.Parameters.Add("@rName", SqlDbType.NVarChar, 10, "rName");
da.UpdateCommand.Parameters.Add("@rIDOriginal", SqlDbType.Int, 4, "rID");
da.UpdateCommand.Parameters["@rIDOriginal"].SourceVersion = DataRowVersion.Original;
bs2.EndEdit();
da.Update(ds, "Relatives");
//重新绑定数据.
bs.Filter = "eID = '" + textBox1.Text.Trim() +"'";
bs.ResetBindings(false);
bs2.Filter = "eID = '" + textBox1.Text.Trim() +"'";
bs2.ResetBindings(false);
问题1: 请问这样写有什么问题? 当更新Employees.eID后, DataGridView就不能绑定了(自动清空了).是不是设置了cascade的问题?
应该在Employees.eID更改后, Relatives.eID也更改的啊?
问题2: 还想到另一个问题, 可否判断表中有没有被更改再执行Update()
问题3: 我这个表单一次只显示Employees中的一行数据, 需要绑定到整个表吗? 可以改成DataAdapter中增加"where eID = '某一个ID'"吗?
我现在用BindingSource.Filter(),那么还是绑定到整张表. 那么在Insert操作时,要求textbox和datagridview都为空,怎么做,能只绑定表结构吗?