0

生徒をデータグリッドに読み込んでから、クラスに割り当てたいと思います。どれだけ正確かは気にしませんが、どのメソッドも機能させることができません。

コンテキストメニューで試してみましたが、イベントを取得できませんでした(これまで操作したことがありません)次に、各行にボタンを追加しましたが、ボタンが含まれる行を取得する方法がわかりませんでしたは。私の最後の試みは、selectedItemを取得し、コンボボックスのようにToString()を使用することでしたが、それも機能しませんでした。

これをチェックしてください:

    private void dataGrid4_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        DataGrid dg = new DataGrid();
        dg = (sender as DataGrid);
        MessageBox.Show(dataGrid4.Items.GetItemAt(1).ToString());
        MessageBox.Show(dataGrid4.CurrentItem.ToString() + "\n" + dataGrid4.CurrentCell.Column.ToString() + "\n" + dataGrid4.CurrentCell.Item.ToString() + "\n" + dataGrid4.SelectedItem.ToString() + "\n" + dataGrid4.SelectedValue.ToString() + "\n" + dataGrid4.SelectedIndex.ToString());
        MessageBox.Show(dg.CurrentItem.ToString() + "\n" + dg.CurrentCell.Column.ToString() + "\n" + dg.CurrentCell.Item.ToString() + "\n" + dg.SelectedItem.ToString() + "\n" + dg.SelectedValue.ToString() + "\n" + dg.SelectedIndex.ToString());
    }

私を助けてください、私はもうすぐびっくりします..):

4

1 に答える 1

4

次のように、グリッドから選択したアイテムを取得できます。

<DataGrid Name="dgStudents" 
                  AutoGenerateColumns="False"
                  SelectionChanged="dgStudents_SelectionChanged">
            <DataGrid.Columns>
                <DataGridTextColumn Header="ID" Binding="{Binding ID}" />
                <DataGridTextColumn Header="Name" Binding="{Binding Name}" />
                <DataGridTextColumn Header="Surname" Binding="{Binding Surname}" />
            </DataGrid.Columns>
        </DataGrid>

イベント ハンドラー:

private void dgStudents_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (e.AddedItems != null && e.AddedItems.Count != 0)
            {
                foreach (Student item in e.AddedItems)
                {
                    Console.WriteLine(item.ID);
                }
            }
        }

シンプルな学生クラス:

class Student
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public string Surname { get; set; }
    }

コンテキストメニューを使用したい場合は、これを試してください:

<DataGrid Name="dgStudents" 
                  AutoGenerateColumns="False">
            <DataGrid.ContextMenu>
                <ContextMenu>
                    <MenuItem Header="ClassA" Click="ClassA_Click" />
                    <MenuItem Header="ClassB" Click="ClassB_Click" />
                </ContextMenu>
            </DataGrid.ContextMenu>

            <DataGrid.Columns>
                <DataGridTextColumn Header="ID" Binding="{Binding ID}" />
                <DataGridTextColumn Header="Name" Binding="{Binding Name}" />
                <DataGridTextColumn Header="Surname" Binding="{Binding Surname}" />
                <DataGridTextColumn Header="Class" Binding="{Binding ClassName}" />
            </DataGrid.Columns>
        </DataGrid>

MenuItemコード ビハインドに2 つのイベント ハンドラーを追加します。

private void ClassA_Click(object sender, RoutedEventArgs e)
        {
            if (dgStudents.SelectedItems != null && dgStudents.SelectedItems.Count != 0)
            {
                foreach (Student item in dgStudents.SelectedItems)
                {
                    item.ClassName = "ClassA";
                }
                dgStudents.Items.Refresh();
            }
        }

        private void ClassB_Click(object sender, RoutedEventArgs e)
        {
            if (dgStudents.SelectedItems != null && dgStudents.SelectedItems.Count != 0)
            {
                foreach (Student item in dgStudents.SelectedItems)
                {
                    item.ClassName = "ClassB";
                }
                dgStudents.Items.Refresh();
            }
        }

学生クラスを次のように変更します。

 class Student
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public string Surname { get; set; }
        public string ClassName { get; set; }
    }
于 2012-11-22T22:09:01.453 に答える