2013-04-24 148 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

在通過索引訪問所選項目之前,您需要檢查選定項目的數量是否大於零條件。