Подтвердить что ты не робот

DataGridView получает текущий выбранный объект

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

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

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

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

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

4b9b3361

Ответ 1

DataGridViewRow.DataBoundItem содержит объект "бизнес", к которому он привязан.

Ответ 2

Вот мой код помещает это в свой класс 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;

Ответ 3

Вы можете получить выбранное значение ячейки следующим образом

yourDGV.CurrentCell.Value;

если вы хотите, чтобы значение в форме строки просто использовало toString, как этот

yourDGV.CurrentCell.Value.toString();

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

Ответ 4

Как насчет этого пути?

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

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

Ответ 5

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

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