Ответ 1
DataGridViewRow.DataBoundItem
содержит объект "бизнес", к которому он привязан.
Мне нужно получить текущий выбранный объект из datataound DataGridView.
Мне не нужен объект текущей выделенной ячейки, но объект, на котором основана вся строка, в этом случае свойства объекта BusinessObject whos образуют столбцы сетки.
Я мог бы переходить через DataSource, но сам по себе является всего лишь объектом и может быть BindingSource или IBindingList или что-то в этом роде - поэтому нелегкий стандартный способ получить желаемый объект.
За этим стоит просто проверить бизнес-объект для свойства IsChanged и попросить пользователя сохранить или отменить изменения до того, как bindingsource выберет следующий элемент. Поэтому я должен узнать текущий объект внутри RowValidating-Event для DataGridView, поскольку BindingSource не предлагает событие, чтобы прекратить изменение до того, как произойдут изменения. См. Здесь хорошо известная проблема
Спасибо за чтение; -)
DataGridViewRow.DataBoundItem
содержит объект "бизнес", к которому он привязан.
Вот мой код помещает это в свой класс 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;
Вы можете получить выбранное значение ячейки следующим образом
yourDGV.CurrentCell.Value;
если вы хотите, чтобы значение в форме строки просто использовало toString, как этот
yourDGV.CurrentCell.Value.toString();
это должно сделать это
Как насчет этого пути?
foreach (DataGridViewRow item in this.dataGridView1.SelectedRows)
{
MessageBox.Show(item.Cells[0].Value.ToString());
}
Мы можем получить несколько выбранных данных строк.
Поскольку вы указали IBindingList - да, поскольку другие сказали, что свойство DataBoundItem предоставит вам то, что вам нужно - есть проблема с тем, что я испытал ранее, и закончил с нулевой ссылкой, но сейчас я не могу думать сценария, в котором это произошло.
Если вы привязываетесь к базе данных с помощью BindingSource - вы можете захватывать текущие события CurrentChanged, CurrentItemChanged вашего BindingSource, тогда вам не нужно иметь дополнительное свойство IsChanged на вашем B.O..., также базовый источник данных также может указывать на изменение - например, если у вас есть BindingSource, связанный с datatable, строка даст вам измененный флаг.