我有一个数据网格,我用数据库中的数据填充。 当我点击一行时,我会调用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;
}
}
为什么会这样?
答案 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)
在按索引访问所选项目之前,您需要检查所选项目计数是否大于零条件。