Silverlight的很多控件相对于VS的其他程序来说,还很不成熟,Datagrid就是其中一个,可能个人比较愚笨,经过好几天才把一些问题搞清楚了。
先描述一下自己这个测试程序的功能。
1,Datagrid上显示10条信息,在最后面另外显示一条空信息,当其中的内容被改变以后,这条信息存入数据源中,Datagrid的最后重新添加一行空信息
2,通过上下键实现数据的交换,比如当前选择的index是5,按了向下的箭头之后,5和6交换,光标跟随5到6的位置上。
实现中出现的问题:
1,需要确定初始index,开始决定使用Datagrid的SelectionChanged事件来获取
private void dg_SelectionChanged(object sender,SelectionChangedEventArgs e)
{
m_CurrentIndex = dg.Selectedindex ;
}
然后在KeyUp事件中交换
问题出现了,每次按下上下键,Selectedindex都会改变,因此在KeyUp中的这个判断if (m_CurrentIndex != dg.Selectedindex)就失去了作用,不会响应。
然后考虑过使用MouseLeftButtonDown事件,但是这个事件居然只在表头才有作用...幸好随后又尝试了MouseLeftButtonUp事件,才顺利的实现了获取初始index的功能。
private void dg_MouseLeftButtonUp(object sender,MouseButtonEventArgs e)
{
m_CurrentIndex = dg.Selectedindex;
}
另外,键盘上的方向键也不响应DataGrid的KeyDown事件,而KenUp事件则是响应的,不知道为什么...
2,数据交换后更新DataGrid,这个是跟CSDN的达人们学习的
dg.ItemsSource = null;
dg.ItemsSource = tempSource;
先将数据源设置为null,然后重新设置数据源,OK,搞定
3,最后的空行不能交换,为实现这个功能,定义了两个数据列表
其中的source用来用来执行数据交换,tempSource作为dg的数据源,最后添加了空行,确保最后一行不被交换,用
if (dg.Selectedindex < source.Count - 1)进行判断。
完整代码:
MainPage.cs
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。