C# WinForm中,DataGridView更新数据的问题:对于多个基表不支持动态SQL生成

jay314159 2010-09-16 06:22:21
首先说一下我想要的功能:在DataGridView中显示我的查询结果,修改里面的单元格,点击“更新”按钮后将修改后的单元格保存到数据库。
下面是我的数据表结构:
表一:tb_sport

id,//主键
name

表一:tb_sporter

id,//主键
name

表三:tb_sporter_list

id,//主键
sport_id,
sporter_id,
name


下面是我的绑定到DataGridView代码

private DataTable dtSportResult;
private SqlDataAdapter sdaSportResult;

private void btnSearchSportListResult_Click(object sender, EventArgs e)
{
string connStr = SportAdmin.Properties.Settings.Default.db_sport_sysConnectionString;

SqlConnection con = new SqlConnection(connStr);
string sql = @"SELECT tb_sporter_list.id AS '编号', tb_sport.name AS '项目名称', tb_sporter.name AS '运动员姓名', tb_sporter_list.result AS '比赛成绩'
FROM tb_sporter_list, tb_sport , tb_sporter
WHERE tb_sporter_list.sport_id = tb_sport.id AND
tb_sporter_list.sporter_id = tb_sporter.id AND
tb_sport.name='男子50米'";
sdaSportResult = new SqlDataAdapter(sql, con);

dtSportResult = new DataTable();
sdaSportResult.Fill(dtSportResult);
dgvSportResult.DataSource = dtSportResult;
}


上面代码执行后,
DataGridView显示一个表格:
编号 项目名称 运动员姓名 比赛成绩
xx xxxx xxxx
xx xxxx xxxx


我希望在比赛成绩单元格输入数字后,点击“更新”按钮保存修改结果。
更新按钮的代码如下:
        //更新成绩
private void btnModifySportResult_Click(object sender, EventArgs e)
{
string connStr = SportAdmin.Properties.Settings.Default.db_sport_sysConnectionString;
SqlConnection conn = new SqlConnection(connStr);
sdaSportResult.UpdateCommand = new SqlCommand(@"update tb_sporter_list set result=@result", conn);//如果使用自定义的代码,我应该怎么把修改后的成绩传给result?

//SqlCommandBuilder sb = new SqlCommandBuilder(sdaSportResult);//使用这句,会提示对于多个基表不支持动态SQL生成
sdaSportResult.Update(dtSportResult);
//dgvSportResult.Update();
}


这里遇到两个问题,
如果使用SqlCommandBuilder ,会提示对于多个基表不支持动态SQL生成;
如果使用自定义的更新语句,我不知道怎么获取所有修改后的单元格的值传递给SQL的update语句。


问题可以归结为:
如果我想修改DaTAGridView的单元格,点击“更新”就保存修改,应该怎么做?

比较急,最多只能给100分,请大家帮忙,谢谢!
...全文
669 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
shan9liang 2011-11-04
  • 打赏
  • 举报
回复
一样的问题,楼主解决了吗?告诉我一下吧
krxl0511 2011-04-03
  • 打赏
  • 举报
回复
我也遇到同样的问题,求解。。。
SDUSTTony 2010-11-28
  • 打赏
  • 举报
回复
太不容易了,看个答案还要回复!无奈
liyangyang621726 2010-09-16
  • 打赏
  • 举报
回复
datagridview貌似自动生成sql语句只能来源于单张基表 如果是来源于多张表 要进行一些改动
jay314159 2010-09-16
  • 打赏
  • 举报
回复
100分的帖子就两个人回复……
wuyq11 2010-09-16
  • 打赏
  • 举报
回复
基于数据库的视图,即通过SELECT一个或多个表生成的数据库视图
如果要对该视图进行更新,通过编写存储过程来操作视图对应的实际数据表。
用语句来判断,哪个字段是哪个表的,然后用语句update回去
str345 2010-09-16
  • 打赏
  • 举报
回复
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
textBox1.Text =dataGridView1.Rows[dataGridView1.CurrentRow.Index ].Cells["id"].Value.ToString() ;
textBox2.Text = dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells["name"].Value.ToString();
}
jay314159 2010-09-16
  • 打赏
  • 举报
回复
有人帮帮我吗

110,538

社区成员

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

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

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