请教高手

小D2013 2010-06-22 04:37:26
以下测试代码,在点击按钮后无法在listview中显示新增的记录,
testEntities te = new testEntities();

public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
Bind();
}
private void Bind()
{
this.listView1.Items.Clear();
List< bookinfo > listBook= this.te.bookinfo.ToList();
foreach (bookinfo book in listBook)
{
ListViewItem lvi = new ListViewItem(book.bookid);
lvi.SubItems.Add(book.bookname);
lvi.SubItems.Add(book.categoryid);
this.listView1.Items.Add(lvi);
}
}

private void button1_Click(object sender, EventArgs e)
{
List<bookinfo> listBook = this.te.bookinfo.ToList();
bookinfo book = new bookinfo();
book.bookid = "14";
book.bookname = "13";
this.te.bookinfo.AddObject(book);
// this.te.SaveChanges()--------------这里不要这条语句
Bind();
}
...全文
96 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
小D2013 2010-06-23
  • 打赏
  • 举报
回复
因为我需要实现一个在两个listview之间转入转出的功能,在点击保存按钮之前不让他存入数据库

另外 单步listBook.Count还是原来的,没有+1
丰云 2010-06-23
  • 打赏
  • 举报
回复
发现上面说的太复杂,
简单的说,
通过linq得到的数据,
都是来自数据库,
linq本身不含有数据,
也不操作数据,
只会产生sql语句!

数据库里没有的数据,
linq就不可能取到!
丰云 2010-06-23
  • 打赏
  • 举报
回复
这依然是对linq工作原理不了解所致。
this.te.bookinfo.AddObject(book);
这步操作之后,
数据库里面没有插入新数据,
这点你应该是已经理解的吧。

在Bind里面,
List< bookinfo > listBook= this.te.bookinfo.ToList();
这一步操作,
是做什么的,
你明白吗?(事实上,你在button1_Click里面写的同样一句话,后面是没有用到的多余的。)
这一句他会生成一个sql查询语句,
类似select * from bookinfo,
返回的是对数据库查询的结果!

虽然看起来是用的同一个this.te.bookinfo,
但意义不一样,
虽然这里testEntities te = new testEntities();
貌似是new 一个数据库对象,
其实不是,是new 一个数据库框架的映射,

linq 是通过用面向对象(数据库及表)的方式来构造sql语句的,
linq操作数据库也是通过sql语句操作。
linq本身不操作数据!

this.te.bookinfo.AddObject(book);
这句只是产生一条插入的sql语句,
但没有SaveChanges,
就等于没有执行该语句。

这样说明白吗?





小D2013 2010-06-23
  • 打赏
  • 举报
回复
丰云: 用添加临时变量 List<bookinfo> 确实可以实现,我现在就是问 不用List<bookinfo> 直接 操作te的方法,其实最主要的疑问是当this.te.bookinfo.AddObject(book); 执行之后,这个te中的bookinfo为什么没有增加,那么这句话,在后台到底进行了什么操作
丰云 2010-06-23
  • 打赏
  • 举报
回复
private void Bind(listBook)
{
this.listView1.Items.Clear();
//List< bookinfo > listBook= this.te.bookinfo.ToList();
foreach (bookinfo book in listBook)
{
ListViewItem lvi = new ListViewItem(book.bookid);
lvi.SubItems.Add(book.bookname);
lvi.SubItems.Add(book.categoryid);
this.listView1.Items.Add(lvi);
}
}

private void button1_Click(object sender, EventArgs e)
{
List<bookinfo> listBook = this.te.bookinfo.ToList();
bookinfo book = new bookinfo();
book.bookid = "14";
book.bookname = "13";
//this.te.bookinfo.AddObject(book);
listBook.Add(book);
// this.te.SaveChanges()--------------这里不要这条语句
Bind(listBook);
}
wuyq11 2010-06-22
  • 打赏
  • 举报
回复
te.SaveChanges什么作用
单步listBook.Count
丰云 2010-06-22
  • 打赏
  • 举报
回复
// this.te.SaveChanges()--------------这里不要这条语句

为什么不要?????????
小D2013 2010-06-22
  • 打赏
  • 举报
回复
高手快来
小D2013 2010-06-22
  • 打赏
  • 举报
回复
按照楼上的写法如下,抱错,第二个参数怎么赋值??
private void button1_Click(object sender, EventArgs e)
{
bookinfo book = new bookinfo();
book.bookid = "14";
book.bookname = "13";
this.te.bookinfo.AddObject(book);
te.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues,te.bookinfo);

Bind();
}
hssg44 2010-06-22
  • 打赏
  • 举报
回复
我遇到的问题和你差不多,
刚刚想到.

private ypDataContext db = new ypDataContext();
db.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues, db.T_material);

我是这样子解决的.
小D2013 2010-06-22
  • 打赏
  • 举报
回复
高手在哪

8,497

社区成员

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

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