получить выбранную строку из DataGrid - PullRequest
0 голосов
/ 22 сентября 2010

Я использую WPF Grid. Первый столбец - это столбец CheckBox, и на моей странице есть одна кнопка сохранения. Когда кнопка нажата, я бы хотел, чтобы все строки флажков были установлены, и вставьте их в таблицу данных.

Как это можно сделать?

1 Ответ

0 голосов
/ 23 сентября 2010

Хотелось бы что-то вроде этой справки?

Он использует шаблон декоратора для обёртывания класса (который, вероятно, получен из ORM, такого как LINQ2SQL), чтобы позволить вам связать данные с выбранным значением.После сохранения вы можете найти выбранные элементы в списке украшенных и сохранить только те.

(простой пример, не совместимый с MVVM)

XAML:

<Window x:Class="CheckTest.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <DataGrid AutoGenerateColumns="False" ItemsSource="{Binding Path=Foos}" Name="gridFoos" Margin="0,0,0,34">
            <DataGrid.Columns>
                <DataGridCheckBoxColumn Header="Selected" Binding="{Binding Path=Selected}"/>
                <DataGridTextColumn Header="Name" Binding="{Binding Path=Value.Name}" />
                <DataGridTextColumn Header="Age"  Binding="{Binding Path=Value.Age}"/>
            </DataGrid.Columns>
        </DataGrid>
        <Button Content="Save" Height="23" HorizontalAlignment="Left" Margin="423,283,0,0" Name="button1" VerticalAlignment="Top" Width="75" Click="btnSave_Click" />
    </Grid>
</Window>

Код:

namespace CheckTest
{
    public partial class MainWindow : Window
    {
        public ObservableCollection<SelectedDecorator<Foo>> Foos { get; set; }
        public MainWindow()
        {
            var bars = new List<Foo>() { new Foo() { Name = "Bob", Age = 29 }, new Foo() { Name = "Anne", Age = 49 } };
            var selectableBars = bars.Select(_ => new SelectedDecorator<Foo>(_)).ToList();
            Foos = new ObservableCollection<SelectedDecorator<Foo>>(selectableBars);
            InitializeComponent();
            DataContext = this;
        }

        private void btnSave_Click(object sender, RoutedEventArgs e)
        {
            var saveThese = Foos.ToList().Where(_ => _.Selected).Select(_=> _.Value);
            //db.BulkUpdate(saveThese); ... or some sutch;
        }
    }
    public class Foo
    {
        public string Name{get;set;}
        public int Age { get; set; }
    }
    public class SelectedDecorator<T>
    {
        public T Value { get; set; }
        public bool Selected { get; set; }
        public SelectedDecorator(T value)
        {
            Selected = false;
            this.Value = value;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...