@the_RAMZAY

Как извлечь выбранную мышкой строку из C# wpf DataGrid?

Имеется два окна(главное и побочное). На главном два лейбла,на побочном DataGrid с подключённой к ней MS_SQL таблице. Требуется передать на главную форму две ячейки из выделенной строки мышкой. В Windows Forms это делается очень легко и логично, а в WPF у datagrid просто напросто отсутствуют упоминания о строке(row)

//Мой первый вариант приложения на Windows Forms
dataGridView1.CellMouseClick += (sender, args) => // перекидывание значений на главное окно
            {
                try
                {
                    Program.Mw.CPU_lbl_vendor.Text = string.Format("Cpu Vendor: {0}",
                        dataGridView1.SelectedRows[0].Cells[1].Value.ToString());
                    Program.Mw.CPU_lbl_name.Text = string.Format("Name: {0}",
                        dataGridView1.SelectedRows[0].Cells[2].Value.ToString());
                    Program.Mw.CPU_lbl_price.Text = string.Format("Price: {0}",
                        dataGridView1.SelectedRows[0].Cells[6].Value.ToString());
                }
                catch (Exception)
                {
                    MessageBox.Show("Требуется ввести данные полностью!");
                }
            };

С WPF я уже прогуглил весь русский,английский и не только интернет,ну уже даже не знаю что и делать,вот пришел сюда.
Пока что извлекаю через очень большие огороды выделенный мышкой элемент вот так:
DG_CPU.SelectionChanged += (sender, args) =>
                MainWindow.mw.CPU_Name_lbl.Content = DG_CPU.CurrentCell.Column.GetCellContent(DG_CPU.CurrentCell.Item);

Но это не то, т.к мне нужны конкретные поля из строки.
Сейчас вы скажите мол : "Вот есть Windows Forms,там у тебя всё работает,вот им и пользуйся" ,но люди,расти то хочется всётаки.
  • Вопрос задан
  • 7730 просмотров
Решения вопроса 1
@the_RAMZAY Автор вопроса
UPD. Нашел более адекватное решение проблемы:
public CPU_window()
        {
            InitializeComponent();
            DG_CPU.SelectionMode = DataGridSelectionMode.Extended;
            //DG_CPU.SelectionChanged += (sender, args) =>
            //    MainWindow.mw.CPU_Name_lbl.Content = DG_CPU.CurrentCell.Column.GetCellContent(DG_CPU.CurrentCell.Item);
            DG_CPU.SelectionChanged += (sender, args) =>
            {
                MainWindow.mw.CPU_Vender_lbl.Content = string.Format("Vender is: {0}",
                    (DG_CPU.SelectedItem as CPU).Vendor);
                MainWindow.mw.CPU_Name_lbl.Content = string.Format("Name is: {0}", (DG_CPU.SelectedItem as CPU).Name);
                MainWindow.mw.CPU_Price_lbl.Content = (DG_CPU.SelectedItem as CPU).Price;
            };
            up.Click += (sender, args) => (DG_CPU.SelectedItem as CPU).Price++;
        }

Основная фишка заключается в том, что следует приводить свойство SelectedItem вашего datagrid к классу таблицы описанной в модели( в моём случае я выбирал Linq to SQL и по этому имя таблицы в sql идентично имени в классе таблицы C#), свойства которой идентичны названиям колонок таблицы.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@Alm1111
Ребята! Все довольно просто, не надо мудрить)))

//Приводим строку к классу, объект которого отображается в таблице
notes n = (notes)dg1.Items[dg1.SelectedIndex];
//Вызываем один из методов объекта, значение которого он берет из таблицы (текстовый столбец message)
MessageBox.Show(n.message);
//У меня класс "notes" это сущность реляционной БД созданный с помощью модели ADO.NET
Ответ написан
Комментировать
vipuhoff
@vipuhoff
Советую глянуть тут, довольно подробно описано все. На счет производительности сего метода сказать ничего не смогу, но выглядит довольно грубо.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы