2013-04-24 76 views
1

我有一个数据网格,我填充数据库中的数据。 当我点击一行时,我会调用GotFocus方法,并在满足某些要求时尝试使按钮可见。datagrid选择索引给出的麻烦

private void dtgVerkoopsdocumenten_GotFocus(object sender, RoutedEventArgs e) 
{ 
    DataItem row = (DataItem)dtgVerkoopsdocumenten.SelectedItems[0]; 
    if (row.soort2 == "Factuur") 
    { 
     btnBoeking.IsHitTestVisible = true; 
     btnBoeking.Opacity = 1; 
    } 
    else 
    { 
     btnBoeking.IsHitTestVisible = false; 
     btnBoeking.Opacity = 0.5; 
    } 
} 

这给了我一个错误。

Index was out of range. Must be non-negative and less than the size of the collection. 

现在,当我调用代码,但从一个按钮单击它它应该如何工作。

private void tester_Click(object sender, RoutedEventArgs e) 
{ 
    DataItem row = (DataItem)dtgVerkoopsdocumenten.SelectedItems[0]; 
    test.Content = row.soort2; 
    if (row.soort2 == "Factuur") 
    { 
     btnBoeking.IsHitTestVisible = true; 
     btnBoeking.Opacity = 1; 
    } 
    else 
    { 
     btnBoeking.IsHitTestVisible = false; 
     btnBoeking.Opacity = 0.5; 
    } 
} 

这是为什么?

+0

看起来像'dtgVerkoopsdocumenten.SelectedItems [0];'必须是这个问题。你有没有检查你是否真的有选择的项目? – Yahya 2013-04-24 14:14:35

+0

我知道这个问题,我确实选择了一些项目。我只是不明白为什么当我通过gotfocus方法执行代码时发生错误,而不是通过按钮执行代码时发生错误。 – 2013-04-24 14:30:16

回答

2

为什么不使用DataGrid SelectedIndexChanged事件?

WYY使用的GotFocus那不告诉你,如果用户还送了一个选择,开始时,

DataItem row = (DataItem)dtgVerkoopsdocumenten.SelectedItems[0]; 

从的GotFocus叫你什么都没有,除了有没有适当的错误检查选择检查,如果选择将失败,

如果使用选择改变事件,你知道用户做出选择改变有供选择一些事件

+0

谢谢。不知道为什么我以前没有想过这件事。一个评论虽然。在wpf中,您必须使用selectionchanged事件,因为selectedindexchanged不存在。 – 2013-04-24 15:51:25

0

由于dtgVerkoopsdocumenten.SelectedItems为空,因此我们不确定dtgVerkoopsdocumenten.SelectedItems是否有任何项目。 你可以在做任何事之前检查dtgVerkoopsdocumenten.SelectedItems

if (dtgVerkoopsdocumenten.SelectedItems != null && 
     dtgVerkoopsdocumenten.SelectedItems.Count > 0) 
    { 
     DataItem row = (DataItem)dtgVerkoopsdocumenten.SelectedItems[0]; 
     ... 
    } 
+0

这个问题似乎也是所选择的索引不是它应该是的索引。像第二行获取索引0,第一个索引1 – 2013-04-24 14:22:05

0

在通过索引访问所选项目之前,您需要检查选定项目的数量是否大于零条件。