DataGridView получить текущий выбранный объект - PullRequest
37 голосов
/ 18 января 2010

Мне нужно получить текущий выбранный объект из базы данных DataGridView.

Мне не нужен объект текущей выбранной ячейки, но объект, на котором основана вся строка, в этом случае свойства BusinessObject, которые создают столбцы сетки.

Я мог бы перейти к DataSource, но он сам по себе является просто объектом и может быть BindingSource или IBindingList или чем-то в этом роде - так что нелегко стандартизированный способ получить нужный объект.

Кроме того, необходимо просто проверить businessObject для свойства IsChanged и попросить пользователя сохранить или отменить изменения, прежде чем источник привязки выберет следующий элемент. Поэтому я должен выяснить текущий объект внутри RowValidating-Event объекта DataGridView, так как BindingSource не предлагает событие, чтобы остановить изменение до того, как произойдет изменение.

Спасибо за чтение; -)

Ответы [ 5 ]

76 голосов
/ 18 января 2010

DataGridViewRow.DataBoundItem содержит объект 'business', с которым он связан.

7 голосов
/ 30 июля 2013

Вот мой код, поместите его в свой класс Person

 public static explicit operator Person(DataRow dr)
    {
        Person p = new Person();
        p.adi = dr.ItemArray[0].ToString();
        p.id = Int32.Parse(dr.ItemArray[1].ToString());
        p.soyadi = dr.ItemArray[2].ToString();
        p.kartNo = dr.ItemArray[3].ToString();
        p.dogumTarihi = DateTime.Parse( dr.ItemArray[4].ToString() );
        p.adres = dr.ItemArray[5].ToString();
        p.meslek = dr.ItemArray[6].ToString();
        p.telefon = dr.ItemArray[7].ToString();
        p.gsm = dr.ItemArray[8].ToString();
        p.eposta = dr.ItemArray[9].ToString();

        return p;
    }

и нажмите кнопку обновления

DataRow row = (dataGridView1.SelectedRows[0].DataBoundItem as DataRowView).Row;
Person selected = (Person)row;
1 голос
/ 07 августа 2017

Вы можете получить выбранное значение ячейки, как это

yourDGV.CurrentCell.Value;

Если вы хотите, чтобы значение в виде строки просто использовало метод ToString (), как это

yourDGV.CurrentCell.Value.ToString();

Этодолжен сделать это

0 голосов
/ 27 октября 2015

Поскольку вы указали IBindingList - да, как уже говорили другие, свойство DataBoundItem даст вам то, что вам нужно - есть проблема с ним, с которой я сталкивался ранее и закончился нулевой ссылкой, но сейчас я не могу думать сценария, в котором это произошло.

Если вы привязаны к данным с помощью BindingSource - вы можете захватывать события CurrentChanged, CurrentItemChanged вашего BindingSource, тогда вам не нужно иметь дополнительное свойство IsChanged на вашем B.O. .., также базовый источник данных может также указывать на изменение - например, если у вас есть привязка BindingSource к таблице данных, строка выдаст вам измененный флаг.

0 голосов
/ 25 марта 2014

А как же так?

foreach (DataGridViewRow item in this.dataGridView1.SelectedRows)
{
  MessageBox.Show(item.Cells[0].Value.ToString());
}

Мы можем получить данные нескольких выбранных строк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...