请教一个Winform里DataGrid向更新数据问题

rocklabzhang 2004-12-23 11:26:26
现在想在DataGrid里直接修改、删除或添加一行,希望直接把这个修改结果更新到其对应的DataSet从而更新到数据库
我以前的做法都是放一个“修改”之类按钮,然后单击按钮把该行数据单独取出来,然后直接向数据库更新。现在想在Grid上直接更新到数据库
请问各位有没有这方面的代码给小弟几段?
感谢!!
...全文
147 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
ElwinLuo 2004-12-24
  • 打赏
  • 举报
回复
更新数据库的sql语句总是要写的,数据库怎么知道你要更新呀?
cjjrty 2004-12-24
  • 打赏
  • 举报
回复
up
lovenet228 2004-12-24
  • 打赏
  • 举报
回复
up
JacksonH 2004-12-24
  • 打赏
  • 举报
回复
示例:数据库假定为aaa,里面有表bbb,包含字段b varchar(10)
主程序如下(其他的可以举一反三):

private void button1_Click(object sender, System.EventArgs e)
{
DataTable dt = (DataTable)this.dataGrid1.DataSource;

System.Data.SqlClient.SqlConnection sqlConn = new SqlConnection("user id=sa;pwd=123;data source=(local);persist security info=False;initial catalog=aaa");
System.Data.SqlClient.SqlCommand sqlCmd = new SqlCommand("select * from bbb",sqlConn);
System.Data.SqlClient.SqlDataAdapter sqlAdap = new SqlDataAdapter(sqlCmd);

System.Data.SqlClient.SqlCommandBuilder sqlBuild = new SqlCommandBuilder(sqlAdap);
sqlConn.Open();
sqlAdap.Update(dt);
sqlConn.Close();
}

private void Form2_Load(object sender, System.EventArgs e)
{

DataTable dt = new DataTable();

System.Data.SqlClient.SqlConnection sqlConn = new SqlConnection("user id=sa;pwd=123;data source=(local);persist security info=False;initial catalog=aaa");
System.Data.SqlClient.SqlDataAdapter sqlAdap = new SqlDataAdapter("select * from bbb",sqlConn);

sqlConn.Open();
sqlAdap.Fill(dt);
sqlConn.Close();

this.dataGrid1.DataSource = dt;

}
ClampHammer 2004-12-24
  • 打赏
  • 举报
回复
用DataGrid添加修改删除时,最好用DataView
他可以同步DataGrid

DataView dataView;
DataGrid dataGrid = new DataGrid();
dataGrid.DataSource = dataView;

弹出窗口修改时,可以将当前选中的行对象DataRowView传递给修改子窗口
可以重载子窗口的构造函数
private DataRowView dataRowView;
public ModifyWindow(DataRowView drv)
{
//传递你要修改的行
this.dataRowView=drv;
}

JacksonH 2004-12-24
  • 打赏
  • 举报
回复
这样的关系就复杂了,涉及到了DataSet和Relation,一般最好是避开这么处理方式
rocklabzhang 2004-12-24
  • 打赏
  • 举报
回复
to JacksonH(勇气) :
请问在绑定父子表时,该怎么更新到数据库?
谢谢
chaochao830101 2004-12-24
  • 打赏
  • 举报
回复
private string[] strArray=null;
private int row=-1;
private int col=-1;
private void dataGrid1_Click(object sender, System.EventArgs e)
{
try
{
if(this.strArray==null)
{
this.SetArray(); //初始化一个数组,用来保存当前行的每列数据。
}
else
{
if(row!=dataGrid1.CurrentRowIndex) //判断是否离开当前行
{
bool yesOrno=false; //用来判断一行中是否有修改过的数据
for(int i=0;i<col;i++) //判断某列是否被修改过
{
if(strArray[i]!=dataGrid1[row,col].ToString())
{
yesOrno=true;
}
}
if(yesOrno)
{
//如果修改过则调用数据库的修改方法
}
this.row=dataGrid1.CurrentRowIndex;
this.col=dataGrid1.VisibleColumnCount;
this.SetArray();//重新记录当前行中每列的数据。
}
}
}
catch(System.ArgumentOutOfRangeException e1)
{
MessageBox.Show(e1.Message);
}
}
private void SetArray()
{
this.row=dataGrid1.CurrentRowIndex;
this.col=dataGrid1.VisibleColumnCount;
strArray=new string[this.col];
for(int i=0;i<this.col;i++)
{
strArray[i]=dataGrid1[this.row,i].ToString();
}
}

如果是删除的话,就可以在DataGrid上注册"Del"事件,删除dataGrid1.CurrentRowIndex;(当前选择行)这种方法避免了太平凡的操作库.(人个看法)但少不了对数据的update 供参考.
marvelstack 2004-12-24
  • 打赏
  • 举报
回复
http://blog.csdn.net/zhzuo/archive/2004/08/06/67037.aspx

110,533

社区成员

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

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

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