linq 通过程序插入的数据怎么即时通过gridview显示出来?

文飞扬 2008-10-22 03:47:21
请问在使用LINQ TO SQL对象关系设计器开发软件的时候,有一个父表,两个子表在同一个FORM上,GRID作为只读控件显示数据,用程序成功插入到数据库的记录怎么即时通过datagridview显示出来?

通过下面的代码,能够把父表插入的记录即时通过datagridview显示出来(student是父表)
student st = new student();


st.studentID = id;
st.names = txtName.Text.Trim();
st.@class = txtBtClass.Text.Trim();
st.graduatedSchool = txtBSchool.Text.Trim();
st.userName = Properties.Settings.Default.userName;
st.opTime = DateTime.Now;

db.students.InsertOnSubmit(st);


try
{
db.SubmitChanges();
}
catch (Exception ex)
{

MessageBox.Show(ex.Message);
return;
}



var s = from st in db.students
where st.studentID == id
select st;

studentsBindingSource.DataSource = s;


但是子表的通过下面的代码却显示不出来,有什么好的解决办法吗?
var inquey = from tu in db.tuitions
where tu.receiptID == int.Parse(maskedTxtReceptID.Text)
select tu;

foreach (var item in inquey)
{
int? id = item.studentID;
item.studentID = int.Parse(maskedTxtStudentID.Text);
item.date = dateTimePicker.Value;
item.@class = txtRClass.Text.Trim();
item.years = int.Parse(maskedTxtRYear.Text);
item.term = cmbRTerm.Text;
item.sums = int.Parse(maskedTxtRSum.Text.Trim());
item.insurance = radInsure.Checked ? 1 : 0; //保险填1

item.userName = Properties.Settings.Default.userName;
item.opTime = DateTime.Now;
}

try
{
db.SubmitChanges();
}
catch (Exception ex)
{

MessageBox.Show(ex.Message);
return;
}

MessageBox.Show("添加收据成功!");
// this.tuitionsDataGridView.Refresh();
var s = from st in db.students
where st.studentID == id
select st;
studentsBindingSource.DataSource = s;


其中tuitions是子表,其属性studentID 是student表的主键。
代码运行正常,对数据库的插入和更新结果也正常,就是不能即时显示出来。
...全文
169 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
潇洒王子 2011-11-23
  • 打赏
  • 举报
回复
不懂,我是来学习的
mills_ 2011-06-03
  • 打赏
  • 举报
回复
我来挖坟了!希望对遇到同样问题的朋友有帮助!

其实就是先把datacontext=null,而不是datacontext对象dispose

然后再重新绑定!就是这么简单!
文飞扬 2008-10-27
  • 打赏
  • 举报
回复
兄弟,studentsBindingSource.DataBind(); 这个方法根本不存在,要不你到msdn的linq to sql查询一下,或许在LINQ里面就没有绑定这个词了,取而代之的是设定数据源,就是studentsBindingSource.DataSource = s;
[Quote=引用 6 楼 psychese 的回复:]
studentsBindingSource.DataSource = s;
差一句

studentsBindingSource.DataBind();


datacontext根本不需要重新new,所有数据全部都是缓存在内存中的
[/Quote]
psychese 2008-10-25
  • 打赏
  • 举报
回复
studentsBindingSource.DataSource = s;
差一句

studentsBindingSource.DataBind();


datacontext根本不需要重新new,所有数据全部都是缓存在内存中的
文飞扬 2008-10-23
  • 打赏
  • 举报
回复
楼上各位说的都不对,还是自己解决了问题,那就是必须先把datacontext对象dispose,然后重新new,重新指定数据源。
我不知道这个到底是linq to sql的一个bug,还是datacontext里面有某个属性没有指定,因为如果通过程序更新的数据是父表数据的话,不需重构datacontext对象,直接指定数据源就可以即时更新,而子表则不能。
warrior 2008-10-22
  • 打赏
  • 举报
回复
在数据库中将父表Student与子表Tuitions通过StudentID建立关系,然后重新将两表拖到LINQ数据模型中来,这样会自动在数据模型中建立两个类及类间的关系。
将显示Tuitions的Grid绑定到db.Students.Tuitions

其实就是利用LINQ建立主从表的方法。
netddayup 2008-10-22
  • 打赏
  • 举报
回复
重新绑定了,是要刷新才可以的,如果页面没刷新,至少也要用个ajax局部刷新,比如放在微软提供的ajax框架,updatepanel里面,不过页面要加上ScriptManager才行。
文飞扬 2008-10-22
  • 打赏
  • 举报
回复
重新绑定也不行啊,必须要把这个form关闭,然后重新打开,就出来了。
[Quote=引用 1 楼 netddayup 的回复:]
重新绑定一次gridview的数据就可以了啊!
[/Quote]
netddayup 2008-10-22
  • 打赏
  • 举报
回复
重新绑定一次gridview的数据就可以了啊!

8,497

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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