Datagrid的SelectionChanged事件触发问题

woxinliuqiang 2016-03-27 03:39:28
最近做了个程序想在Datagrid中选中某一行分别要实现两个功能(不是同时)

1、将这一行的数据中的某个字段在TextBox中显示出来
2、点击这一行,使用删除的Button,将这一行删除。

但是我使用Datagrid的SelectionChanged事件触发后,显示没有问题,但是只要我点击删除的Button就会报错(报的错误我上传了图片)
代码如下:

private void dgAccessLevel_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
AccessLevel acl = (AccessLevel)dgAccessLevel.SelectedItem;
txtAcceessLevel.Text = acl.Name;
}


private void btDelete_Click(object sender, RoutedEventArgs e)
{
AccessLevel acl = (AccessLevel)dgAccessLevel.SelectedItem;
if (acl == null)
{
MessageBox.Show("没有选中任何行!");
return;
}
if (MessageBox.Show("真的要删除" + acl.Name + "吗?", "提醒",
MessageBoxButton.YesNo) == MessageBoxResult.Yes)
{
new AccessDAL().DeleteById(acl.RecordID);
LoadData();
}

}
引用

...全文
1697 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
woxinliuqiang 2016-03-31
  • 打赏
  • 举报
回复
感谢各位,我最后是这么解决的,也就是在SelectionChanged的时候判断一下就可以了,应该是删除之后表格有所改变导致SelectionChanged事件启动,因为我已经删了此行,此行变成Null了,所以才会报我截图的错误,谢谢了!

        private void dgAccessLevel_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            AccessLevel acl = (AccessLevel)dgAccessLevel.SelectedItem;
            if (acl != null)
            {
                txtAcceessLevel.Text = acl.Name;
                dgLevelReader.ItemsSource = new AccessDAL().ListAllLevelReader(acl.Name);
                
            }
            else
            {
                txtAcceessLevel.Text = "";
            }
        }
大鱼> 2016-03-29
  • 打赏
  • 举报
回复
你对象没找到,new一个对象。老婆都找不到还想用人家,哥们先把老婆找到!
熊猫rrr 2016-03-28
  • 打赏
  • 举报
回复
在删除按钮的代码中,执行完删除操作后,再手动设置当前的selectedItem不知道行不行?
woxinliuqiang 2016-03-28
  • 打赏
  • 举报
回复
刚上传了错误图片,大家帮忙看看,我觉得应该是在执行删除功能之后Datagrid的SelectionChanged事件也触发了导致的报错,即这一行被删除了SelectionChanged有所动作,但是如果不用SelectionChanged,我第一个功能即“将这一行的数据中的某个字段在TextBox中显示出来”就无法实现了,有什么比较好的办法吗?
woxinliuqiang 2016-03-28
  • 打赏
  • 举报
回复
exception92 2016-03-28
  • 打赏
  • 举报
回复
Justin-Liu 2016-03-28
  • 打赏
  • 举报
回复
图片没上传啊
血战31天 2016-03-28
  • 打赏
  • 举报
回复
手机版上没看到图片,
leogrim 2016-03-28
  • 打赏
  • 举报
回复
把你要选中来显示的行也就是SelectedItem绑定起来就行了,比如你每一行是一个类A,在你后台代码或者ViewModel中定义一个A类型的属性,比如SelectedA,然后就把datagrid的SelectedItem绑定到SelectedA,然后你要显示的Text再绑定到SelectedA里面你要显示的值就行了
Poopaye 2016-03-27
  • 打赏
  • 举报
回复
图片呢?图片呢?

110,566

社区成员

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

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

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