1

データベースからのデータを入力するデータグリッドがあります。行をクリックすると、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;
    }
}

どうしてこれなの?

4

3 に答える 3

2

DataGrid SelectedIndexChanged イベントを使用しないのはなぜですか?

ユーザーが最初に選択を行ったかどうかさえわからない GotFocus を使用してください。

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

gotfocus からの呼び出しは失敗します。

選択変更イベントを使用する場合、ユーザーが選択変更を行ったことを知っている場合、選択のためのイベントがいくつかあります。

于 2013-04-24T15:38:54.893 に答える
0

dtgVerkoopsdocumenten.SelectedItems は空で、GotFocusイベントの前にSelectedItemChangedイベントが発生するため、アイテムがあるかどうかはわかりdtgVerkoopsdocumenten.SelectedItemsません。dtgVerkoopsdocumenten.SelectedItems何かをする前に確認できます。

    if (dtgVerkoopsdocumenten.SelectedItems != null && 
        dtgVerkoopsdocumenten.SelectedItems.Count > 0)
    { 
      DataItem row = (DataItem)dtgVerkoopsdocumenten.SelectedItems[0];
      ...
    }
于 2013-04-24T14:13:21.870 に答える