datagrid选择索引会带来麻烦

时间:2013-04-24 14:08:14

标签: c# wpf

我有一个数据网格,我用数据库中的数据填充。 当我点击一行时,我会调用GotFocus方法并尝试在满足某些要求时显示一个按钮。

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;
    }
}

为什么会这样?

3 个答案:

答案 0 :(得分:2)

为什么不使用DataGrid SelectedIndexChanged事件?

Wyy使用GotFocus,它不会告诉你用户是否选择了开头,

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

来自gotfocus的调用将失败,因为您没有选择任何内容,除了没有错误检查以检查选择,

如果您使用选择更改事件,您知道用户已进行选择更改,则有许多事件可供选择

答案 1 :(得分:0)

因为dtgVerkoopsdocumenten.SelectedItems为空并且GotFocus事件在SelectedItemChanged事件之前加注,所以我们不确定dtgVerkoopsdocumenten.SelectedItems是否有任何项目。 您可以在执行任何操作之前检查dtgVerkoopsdocumenten.SelectedItems

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

答案 2 :(得分:0)

在按索引访问所选项目之前,您需要检查所选项目计数是否大于零条件。