在绑定数据源的情况下,对datagridview的数据进行修改, 插入后, 然后再一次更新数据源.

duzhonghua 2008-07-22 09:18:22
在绑定数据源的情况下,对datagridview的数据进行修改,插入后, 然后再一次更新数据源.
...全文
449 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
royal1 2008-07-22
  • 打赏
  • 举报
回复
//查找是否已存在某记录
public bool existRecord(string id)
{
string mSql4 = "select * from T_ProduceState where LotNo='" + id+ "'";
DataTable dt4 = new DataTable("result4");
SqlCommand mySqlDataSetCmd4 = new SqlCommand(mSql4, _conn);
adapter.SelectCommand = mySqlDataSetCmd4;
adapter.Fill(dt4);

if (dt4.Rows.Count > 0)
{
return true;
}
else
{
return false;
}
}

//更新记录
public void UpdateRecord(string id, M_Item item)
{
string mSql = "select id,lotNo,SerialNo from M_CurrentItem where id='" + id + "'" ;

//查询
DataTable dt = new DataTable("result");
SqlCommand mySqlDataSetCmd = new SqlCommand(mSql, _conn);
adapter.SelectCommand = mySqlDataSetCmd;
adapter.Fill(dt);

//更新
adapter.UpdateCommand = new SqlCommand("update M_CurrentItem set lotno= @lotno " + "where id='" + id + "'", _conn);
adapter.UpdateCommand.Parameters.Add("@lotno", SqlDbType.NVarChar, 2, "lotno");
dt.Rows[0][1] = item.lotno;
adapter.Update(dt);
}
royal1 2008-07-22
  • 打赏
  • 举报
回复
//插入记录
public void NewRecord(string itemId, string lotNo)
{
SqlCommand mySqlDataSetCmd1 = new SqlCommand("select ID,LotNo,ItemID,ProduceTime from T_ProduceState", _conn);
adapter.SelectCommand = mySqlDataSetCmd1;

//添加参数
adapter.InsertCommand = new SqlCommand("insert into T_ProduceState (ID,LotNo,ItemID,ProduceTime) " + "values (@ID, @LotNo, @ItemID, @ProduceTime)", _conn);
adapter.InsertCommand.Parameters.Add("@ID", SqlDbType.NVarChar, 40, "ID");
adapter.InsertCommand.Parameters.Add("@LotNo", SqlDbType.NVarChar, 15, "LotNo");
adapter.InsertCommand.Parameters.Add("@ItemID", SqlDbType.NVarChar, 40, "ItemID");
adapter.InsertCommand.Parameters.Add("@ProduceTime", SqlDbType.DateTime, 8, "ProduceTime");

DataTable dt1 = new DataTable("T_ProduceState");
adapter.Fill(dt1);

//新增一行
DataRow dr = dt1.NewRow();
dr["ID"] = GetId();
dr["LotNo"] = lotNo;
dr["ItemID"] = itemId;
dr["ProduceTime"] = DateTime.Now;
dt1.Rows.Add(dr);

adapter.Update(dt1);
}

duzhonghua 2008-07-22
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 lsj_zrp 的回复:]
就是想批量处理吧,你的数据库表要有主键
private void datagridsave()
{
if (ds.HasChanges())
{
try
{
SqlDataAdapter adapter = new SqlDataAdapter("select * from Customer", new SqlConnection(SqlHelper.ConnectionString));

SqlCommandBuilder cmdBuilder = new SqlCommandBuilder(adapte…
[/Quote]

如果自己写update和插入语句,要怎么写
royal1 2008-07-22
  • 打赏
  • 举报
回复
恩,要装个包的。简单一点点的那你用SqlDataAdapter做个公共的方法
lsj_zrp 2008-07-22
  • 打赏
  • 举报
回复
tablename是ds里面datatable的名称
SqlHelper是操作数据库的类,你可以在网上下一个,也可以自己写,就是操作数据库而已
duzhonghua 2008-07-22
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 royal1 的回复:]
LZ是不是想更新改变的内容,插入新增的内容?
这样需要对数据源逐个操作,不能对集合操作,除非用NHibernate中的SaveOrUpdate(object obj)方法。
[/Quote]

那不是用到NHibernate包什么的,没用过啊,想来个简单一点点的.............
duzhonghua 2008-07-22
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 lsj_zrp 的回复:]
就是想批量处理吧,你的数据库表要有主键
private void datagridsave()
{
if (ds.HasChanges())
{
try
{
SqlDataAdapter adapter = new SqlDataAdapter("select * from Customer", new SqlConnection(SqlHelper.ConnectionString));

SqlCommandBuilder cmdBuilder = new SqlCommandBuilder(adapte…
[/Quote]

就是这个吧,感觉代码不全, 比如tablename , SqlHelper是个类??
royal1 2008-07-22
  • 打赏
  • 举报
回复
LZ是不是想更新改变的内容,插入新增的内容?
这样需要对数据源逐个操作,不能对集合操作,除非用NHibernate中的SaveOrUpdate(object obj)方法。
etherealkite 2008-07-22
  • 打赏
  • 举报
回复
你想要的就是更新数据集。
lsj_zrp 2008-07-22
  • 打赏
  • 举报
回复
就是想批量处理吧,你的数据库表要有主键
private void datagridsave()
{
if (ds.HasChanges())
{
try
{
SqlDataAdapter adapter = new SqlDataAdapter("select * from Customer", new SqlConnection(SqlHelper.ConnectionString));

SqlCommandBuilder cmdBuilder = new SqlCommandBuilder(adapter);

adapter.DeleteCommand = new SqlCommand("", new SqlConnection(SqlHelper.ConnectionString));
adapter.InsertCommand = new SqlCommand("", new SqlConnection(SqlHelper.ConnectionString));
adapter.UpdateCommand = new SqlCommand("", new SqlConnection(SqlHelper.ConnectionString));
adapter.SelectCommand = new SqlCommand("select * from Customer", new SqlConnection(SqlHelper.ConnectionString));

adapter.DeleteCommand = cmdBuilder.GetDeleteCommand();
adapter.InsertCommand = cmdBuilder.GetInsertCommand();
adapter.UpdateCommand = cmdBuilder.GetUpdateCommand();
adapter.Update(ds, tablename);
}
catch (Exception ex)
{
throw ex;
}
}
}
//ds是绑定datagrieview的数据源,其实就是用SqlCommandBuilder
上山老人 2008-07-22
  • 打赏
  • 举报
回复
这个不太会 菜鸟学习
wanghui0380 2008-07-22
  • 打赏
  • 举报
回复
多做一道手续把
先把数据源绑到BindingSource这个控件上
再把BindingSource绑到Datagriview上就成了

ps:对BindinSource的任何修改都会直接反应到被绑定控件上

有空可以看看《WindowS Froms 2.0数据绑定--net智能客户端数据绑到应用程序设计》这本书,这本书对所谓的“智能”性数据绑定这个让人容易误解和误会的技术讲的还算比较中肯。
GhostAdai 2008-07-22
  • 打赏
  • 举报
回复
重新绑定一次。
pisces007 2008-07-22
  • 打赏
  • 举报
回复
问题是什么?
duzhonghua 2008-07-22
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 royal1 的回复:]
你绑定数据源应该是List集合。
因为既要新增又要更新,只能做循环,对集合的每条记录先判断是否存在数据库中,若存在则使用更新方法,若不存在则新增。
[/Quote]

谢谢
royal1 2008-07-22
  • 打赏
  • 举报
回复
你绑定数据源应该是List集合。
因为既要新增又要更新,只能做循环,对集合的每条记录先判断是否存在数据库中,若存在则使用更新方法,若不存在则新增。
duzhonghua 2008-07-22
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 royal1 的回复:]
//查找是否已存在某记录
public bool existRecord(string id)
{
string mSql4 = "select * from T_ProduceState where LotNo='" + id+ "'";
DataTable dt4 = new DataTable("result4");
SqlCommand mySqlDataSetCmd4 = new SqlCommand(mSql4, _conn);
adapter.SelectCommand = mySqlDataSetCmd4;
adapter.Fill(dt4);

if (dt4.Rows.Count > 0)
{
return true;
}…
[/Quote]

同样的问题,我在dataGridView里面,更新了多个地方,你怎么更新啊??

谢谢
duzhonghua 2008-07-22
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 royal1 的回复:]
//插入记录
public void NewRecord(string itemId, string lotNo)
{
SqlCommand mySqlDataSetCmd1 = new SqlCommand("select ID,LotNo,ItemID,ProduceTime from T_ProduceState", _conn);
adapter.SelectCommand = mySqlDataSetCmd1;

//添加参数
adapter.InsertCommand = new SqlCommand("insert into T_ProduceState (ID,LotNo,ItemID,ProduceTime) " + "values (@ID, @LotNo, @ItemID, @Produce…
[/Quote]

你的方法可以是可以, 但是我在dataGridView 里面添加多条记录的时候,怎么调用你的这个方法呢

110,565

社区成员

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

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

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