请教:winform中的控件绑定到DATATABLE,如何将控件中TEXT改变保存到数据库

Ilyj 2003-08-29 07:25:44
我做一个数据库程序,将WINFORM中的textBox1绑定到DATATABLE,
textBox1.DataBindings.Add("Text",dtZsljtjb.Tables["zsljtjb"],"JM");
textBox4.DataBindings.Add("Text",dtZsljtjb.Tables["zsljtjb"],"JJ");
textBox5.DataBindings.Add("Text",dtZsljtjb.Tables["zsljtjb"],"DS");
textBox6.DataBindings.Add("Text",dtZsljtjb.Tables["zsljtjb"],"bz");
textBox7.DataBindings.Add("Text",dtZsljtjb.Tables["zsljtjb"],"tbr");
textBox8.DataBindings.Add("Text",dtZsljtjb.Tables["zsljtjb"],"shr");
textBox9.DataBindings.Add("Text",dtZsljtjb.Tables["zsljtjb"],"tid");

"ButtonSave"按钮的CLICKED事件中调用
objDataAdapter.Update(dtZsljtjb,"zsljtjb");
修改TEXTBOX内容,保存到数据库,界面没有提示错误,但数据也没有保存,请各位指点是什么原因
另如何通过界面增加新记录,然后保存到数据库
我的方法是:
this.BindingContext [dtZsljtjb.Tables["zsljtjb"]].AddNew();
textBox1.Text="aaa";
//为各textBox9附值
但是界面中输入的数据,同样不能保存
请各位指教


...全文
219 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zouhaiboo 2003-08-29
  • 打赏
  • 举报
回复
我也遇到同样的问题,我只是调用update方法也不能保存

Ilyj 2003-08-29
  • 打赏
  • 举报
回复
这样系统执行返回的结果肯定是 值不能为空(DataTable)
Ilyj 2003-08-29
  • 打赏
  • 举报
回复
谢谢snof(雪狼) ,但是还没有解决我的问题,我也是按上述作的,现在是dt.GetChanges()没有返回任何数据改变,也就没有任何改变的数据保存到数据库
Edifier0709 2003-08-29
  • 打赏
  • 举报
回复
同意楼上。
雪狼1234567 2003-08-29
  • 打赏
  • 举报
回复
首先取得数据,放到DataGrid里

System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection("server=localhost;database=northWind;uid=sa;password=110");
conn.Open();
System.Data.SqlClient.SqlDataAdapter da = new System.Data.SqlClient.SqlDataAdapter("select * from student",conn);
dt = new System.Data.DataSet();
da.Fill(dt,"student");

然后绑定数据集和DataGrid
DataGrid.SetDataBinding(dt,"student");
如果需要,可以绑定TextBox来作录入,而用DataGrid显示
this.textBox16.DataBindings.Add("Text",dt,"student.stuno");
然后进行数据的操作如:
增加:
this.BindingContext[dt,"student"].AddNew();
删除:
this.BindingContext[dt,"student"].RemoveAt(this.BindingContext[dt,"student"].Position);
最后把结果写回数据库:


// sqlInsertCommand1
//
this.sqlInsertCommand1.CommandText = "INSERT INTO student(stuno, name) VALUES (@stuno, @name)";
this.sqlInsertCommand1.Connection = this.conn;
this.sqlInsertCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@stuno", System.Data.SqlDbType.VarChar, 4, "stuno"));
this.sqlInsertCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@name", System.Data.SqlDbType.VarChar, 50, "name"));
//
// sqlUpdateCommand1
//
this.sqlUpdateCommand1.CommandText = "UPDATE student SET stuno = @stuno, name = @name WHERE (stuno = @Original_stuno)";
this.sqlUpdateCommand1.Connection = this.conn;
this.sqlUpdateCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@stuno", System.Data.SqlDbType.VarChar, 4, "stuno"));
this.sqlUpdateCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@name", System.Data.SqlDbType.VarChar, 50, "name"));
this.sqlUpdateCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_stuno", System.Data.SqlDbType.VarChar, 4, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "stuno", System.Data.DataRowVersion.Original, null));

// sqlDeleteCommand1
//
this.sqlDeleteCommand1.CommandText = "DELETE FROM student WHERE (stuno = @Original_stuno)";
this.sqlDeleteCommand1.Connection = this.conn;
this.sqlDeleteCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_stuno", System.Data.SqlDbType.VarChar, 4, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "stuno", System.Data.DataRowVersion.Original, null));

this.sqlDa.DeleteCommand = this.sqlDeleteCommand1;
this.sqlDa.InsertCommand = this.sqlInsertCommand1;
this.sqlDa.UpdateCommand = this.sqlUpdateCommand1;
try
{
sqlDa.Update(dt.GetChanges,"student");
return true;
}
catch(System.Data.SqlClient.SqlException ex)
{

return false;
}
finally
{
conn.Close();
}
Ilyj 2003-08-29
  • 打赏
  • 举报
回复
Sory, textBox1.Text = FrmMain.g_JM;
textBox7.Text =FrmMain.g_UserID;
textBox8.Text =FrmMain.g_JDName;
textBox9.Text =DateTime.Now.ToString();
textBox2.Text= "100 ";
语法是错的,应该是直接给dtZsljtjb.Tables[ "zsljtjb "]]中的列附值,
现在是控件的内容的改变不能到dtZsljtjb.Tables[ "zsljtjb "]]
Ilyj 2003-08-29
  • 打赏
  • 举报
回复
直接编程方式
this.BindingContext [dtZsljtjb.Tables["zsljtjb"]].AddNew();


textBox1.Text = FrmMain.g_JM;
textBox7.Text =FrmMain.g_UserID;
textBox8.Text =FrmMain.g_JDName;
textBox9.Text =DateTime.Now.ToString();
textBox2.Text="100";
objDataAdapter.Update(dtZsljtjb,"zsljtjb");
数据可以保存,控件录入数据,控件中数据的改变没有到DATASET,请指教
Ilyj 2003-08-29
  • 打赏
  • 举报
回复
所有的数据库设置工作都已做了,完整代码如下
string strSql= "select * from zsljtjb where jm='"+FrmMain.g_JM+"' order by sdep";
objSelectCommand = new OleDbCommand(strSql,FrmMain.g_Conn);
objDataAdapter= new OleDbDataAdapter(objSelectCommand);

objDataAdapter.DeleteCommand= new OleDbCommand("delete from zsljtjb where jm=? and sdep=?",FrmMain.g_Conn);
objDataAdapter.DeleteCommand.Parameters.Add("@jm",OleDbType.VarChar,20,"jm");
objDataAdapter.DeleteCommand.Parameters.Add("@sdep",OleDbType.Double);
objDataAdapter.DeleteCommand.Parameters["@sdep"].SourceColumn = "sdep";
objDataAdapter.DeleteCommand.Parameters["@sdep"].SourceVersion = DataRowVersion.Original;

objDataAdapter.InsertCommand= new OleDbCommand("INSERT INTO zsljtjb( JM , SDEP , EDEP , JJ , DS , BZ , TBR , SHR , tid ) VALUES ( ? , ? , ? , ? , ? , ? , ? , ? , ? )",FrmMain.g_Conn);
objDataAdapter.InsertCommand.Parameters.Add("@jm",OleDbType.VarChar,20,"jm");
objDataAdapter.InsertCommand.Parameters.Add("@sdep",OleDbType.Double);
objDataAdapter.InsertCommand.Parameters["@sdep"].SourceColumn="sdep";
objDataAdapter.InsertCommand.Parameters.Add("@edep",OleDbType.Double);
objDataAdapter.InsertCommand.Parameters["@edep"].SourceColumn="edep";
objDataAdapter.InsertCommand.Parameters.Add("@jj",OleDbType.Double);
objDataAdapter.InsertCommand.Parameters["@jj"].SourceColumn="jj";
objDataAdapter.InsertCommand.Parameters.Add("@DS",OleDbType.Integer);
objDataAdapter.InsertCommand.Parameters["@DS"].SourceColumn="DS";
objDataAdapter.InsertCommand.Parameters.Add("@bz",OleDbType.VarChar,10240,"bz");
objDataAdapter.InsertCommand.Parameters.Add("@tbr",OleDbType.VarChar,20,"tbr");
objDataAdapter.InsertCommand.Parameters.Add("@shr",OleDbType.VarChar,20,"shr");
objDataAdapter.InsertCommand.Parameters.Add("@tid",OleDbType.Date);
objDataAdapter.InsertCommand.Parameters["@tid"].SourceColumn="tid";



objDataAdapter.UpdateCommand= new OleDbCommand("UPDATE zsljtjb SET JM = ? , SDEP = ? , EDEP = ? , JJ = ? , DS = ? , BZ = ? , TBR = ? , SHR = ? , tid = ? WHERE (JM = ?) AND (SDEP = ?) ",FrmMain.g_Conn );
objDataAdapter.UpdateCommand.Parameters.Add("@jm",OleDbType.VarChar,20,"jm");
objDataAdapter.UpdateCommand.Parameters.Add("@sdep",OleDbType.Double);
objDataAdapter.UpdateCommand.Parameters["@sdep"].SourceColumn="sdep";
objDataAdapter.UpdateCommand.Parameters.Add("@edep",OleDbType.Double);
objDataAdapter.UpdateCommand.Parameters["@edep"].SourceColumn="edep";
objDataAdapter.UpdateCommand.Parameters.Add("@jj",OleDbType.Double);
objDataAdapter.UpdateCommand.Parameters["@jj"].SourceColumn="jj";
objDataAdapter.UpdateCommand.Parameters.Add("@DS",OleDbType.Integer);
objDataAdapter.UpdateCommand.Parameters["@DS"].SourceColumn="DS";
objDataAdapter.UpdateCommand.Parameters.Add("@bz",OleDbType.VarChar,10240,"bz");
objDataAdapter.UpdateCommand.Parameters.Add("@trb",OleDbType.VarChar,20,"trb");
objDataAdapter.UpdateCommand.Parameters.Add("@shr",OleDbType.VarChar,20,"shr");
objDataAdapter.UpdateCommand.Parameters.Add("@tid",OleDbType.Date);
objDataAdapter.UpdateCommand.Parameters["@tid"].SourceColumn="tid";

try
{
objDataAdapter.Fill(dtZsljtjb,"zsljtjb");

textBox1.DataBindings.Add("Text",dtZsljtjb.Tables["zsljtjb"],"JM");
textBox2.DataBindings.Add("Text",dtZsljtjb.Tables["zsljtjb"],"sdep");
textBox3.DataBindings.Add("Text",dtZsljtjb.Tables["zsljtjb"],"edep");
textBox4.DataBindings.Add("Text",dtZsljtjb.Tables["zsljtjb"],"JJ");
textBox5.DataBindings.Add("Text",dtZsljtjb.Tables["zsljtjb"],"DS");
textBox6.DataBindings.Add("Text",dtZsljtjb.Tables["zsljtjb"],"bz");
textBox7.DataBindings.Add("Text",dtZsljtjb.Tables["zsljtjb"],"tbr");
textBox8.DataBindings.Add("Text",dtZsljtjb.Tables["zsljtjb"],"shr");
textBox9.DataBindings.Add("Text",dtZsljtjb.Tables["zsljtjb"],"tid");

dataGrid1.ReadOnly=true;
// dataGrid1.DataSource=dtZsljtjb;
// dataGrid1.DataMember="zsljtjb";
dtZsljtjb.Tables["zsljtjb"].AcceptChanges();
}
catch (Exception objErr)
{
MessageBox.Show(objErr.Message);
return;
}
主要是窗体中编辑控件内容的改变不能绑定到DATATABLE
而且使用DataTable changeDT =dtZsljtjb.Tables["zsljtjb"].GetChanges();调试时changeDT =null
jjcccc 2003-08-29
  • 打赏
  • 举报
回复
设置DataAdapter对象的InsertCommand,UpdateCommand属性。

110,532

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧