wpf中Textblock显示选中datagrid中的行中的值

sinat_22417511 2017-06-09 12:58:05
我在网上搜索dataGrid控件搜索获得选择行的资料,找到了类似这样的代码
private void table1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{

DataRowView mySelectedItem = table1.SelectedItem as DataRowView;
textBlock1.Text = mySelectedItem.Row[0].ToString();

}

也确实起到了作用的。不过问题出现了,当我点击dataGrid中的某行,textbox控件获得该行中的某个值。我用一个按钮事件处理该值,代码是这样的(为方便阅读只截取部分)
 //此处做sql的查询
cmd.CommandText = "delete from course where courseid=@id";
cmd.Parameters.AddWithValue("@id", textBlock1.Text);

 private void display()
{
con = new SQLiteConnection("Data Source=Mydatabase.s3db");
con.Open();
cmd.Connection = con;
cmd.CommandText = "select * from course";
cmd.ExecuteNonQuery();


//绑定
courseDt = new DataTable("course");
adapter = new SQLiteDataAdapter(cmd);
adapter.Fill(courseDt);
table1.ItemsSource = courseDt.DefaultView;
adapter.Update(courseDt);
con.Close();
}

出现异常:


调试后发现,是因为删除数据库中的选定值后,DataRowView 的值就为空了,而DataRowView的值任为原先的绑定,这个异常该怎么解决呢?

顺便一提,这个异常如果是datagrid_MouseDoubleClick事件则不会发生。
...全文
870 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
sinat_22417511 2017-06-09
  • 打赏
  • 举报
回复
引用 3 楼 duanzi_peng 的回复:
[quote=引用 2 楼 sinat_22417511 的回复:] 谢谢,还想问一下,这里该如何重新加载吗?我用display的函数每次查询sql来显示。我想如果用observerableCollection来作为绑定是不是更好?
是的,用observableCollection 动态数据集合 很方便,删除的时候 先从集合中删除,这会导致UI刷新, 最后再从数据库中删除。[/quote] 你好,observableCollection 如何与数据库结合呢?假设有一个数据库,库中有一个表,表中有两个属性(id,name),能否演示一下呢?还是说将数据库与observablecollection分开。执行操作的时候,先对observablecollection绑定的控件操作,然后再操作数据库?
exception92 2017-06-09
  • 打赏
  • 举报
回复
引用 2 楼 sinat_22417511 的回复:
谢谢,还想问一下,这里该如何重新加载吗?我用display的函数每次查询sql来显示。我想如果用observerableCollection来作为绑定是不是更好?
是的,用observableCollection 动态数据集合 很方便,删除的时候 先从集合中删除,这会导致UI刷新, 最后再从数据库中删除。
sinat_22417511 2017-06-09
  • 打赏
  • 举报
回复
引用 1 楼 duanzi_peng 的回复:
是因为删除数据库中的选定值后,DataRowView 的值就为空了,而DataRowView的值任为原先的绑定 -》删除成功之后重新加载数据库数据到DataGrid。 -》 最好进行非空判断
if(mySelectedItem!=null){
 textBlock1.Text = mySelectedItem.Row[0].ToString();
}
谢谢,还想问一下,这里该如何重新加载吗?我用display的函数每次查询sql来显示。我想如果用observerableCollection来作为绑定是不是更好?
exception92 2017-06-09
  • 打赏
  • 举报
回复
是因为删除数据库中的选定值后,DataRowView 的值就为空了,而DataRowView的值任为原先的绑定 -》删除成功之后重新加载数据库数据到DataGrid。 -》 最好进行非空判断
if(mySelectedItem!=null){
 textBlock1.Text = mySelectedItem.Row[0].ToString();
}
在Windows系统,notepad.exe(记事本)是一个“经典的”、“简洁的”文本编辑器。这个软件,没有华丽的外观,也没有繁杂的功能,仅仅是一个文本编辑小软件。虽然经过Windows系统数十年的变换,但它却保持着永恒姿态,数十年来几乎不曾改变过。曾经,VS的经典DEMO,就有它的身影,一个新建的项目,就藏有一个新建的“记事本”。然而,在WPF的项目,“记事本”却消失的无影无踪,也许是很容易实现,也许是为了革新,而不愿再传承“经典”。确实,使用WPF技术再次让“记事本”复活,确实也是一件非常容易的事情。但是,如果,使用WPF技术,再搭配当下非常流行的MVVM模式呢?复活“记事本”的难度却陡然上升至很多WPF程序员为之默默叹气。而,MVVM模式是掌握WPF的最顶级技术,MVVM模式拥有的无尽的优势,让WPF相对于过往的编程模式来说,是一种革命性的创新,从而也成为大WPF项目必须的模式。但,学习难度。。。。。。在这个《WPF记事本开发详解》的课程,赵老师带领你在WPF,从零开始一步步构建MVVM模式,直到让你亲自以WPF+MVVM的方式,让这个经典的“记事本”软件从你的手“复活”。在课程,赵老师会详细讲解WPF和MVVM的各种技巧,让你从此爱上WPF+MVVM编程。

8,834

社区成员

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

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