Как получить выбранную строку данных в DataGridView? - PullRequest
18 голосов
/ 22 мая 2009

У меня есть DataTable, привязанный к DataGridView. У меня FullRowSelect включен в DGV. Есть ли способ получить выбранную строку как DataRow, чтобы я мог получить строго типизированный доступ к значениям выбранной строки?

Ответы [ 7 ]

27 голосов
/ 22 мая 2009
DataRowView currentDataRowView = (DataRowView)dgv1.CurrentRow.DataBoundItem
DataRow row = currentDataRowView.Row
7 голосов
/ 22 мая 2009

Я не уверен, как это сделать без BindingSource, вот как это сделать с одним:

var drv = bindingSoure1.Current as DataRowView;
if (drv != null)
  var row = drv.Row as MyRowType;
3 голосов
/ 03 июля 2012

Это возможно, получив следующее свойство:

this.dataGridView.SelectedRows

Получается коллекция типа: DataGridViewSelectedRowCollection . Он содержит элементы типа: DataGridViewRow .

Тогда можно получить границу с собственным типом следующим образом:

DataGridViewSelectedRowCollection list = this.dataGridViewInventoryRecords.SelectedRows;
MyType selectedItem = (MyType)list[0].DataBoundItem; //[0] ---> first item
1 голос
/ 22 мая 2009

Вы должны иметь возможность напрямую преобразовать выбранную строку в строго типизированную строку, которая была привязана к DataGridView.

0 голосов
/ 01 мая 2017

Невозможно иметь строго типизированный доступ к представлению таблицы данных, если внутри набора данных не используется табличный адаптер.

Чтобы получить доступ к строго типизированным переменным, когда сетка данных связана с источником данных через источник привязки, выполните следующие действия:

Создать новый проект.

Вставьте DataSet с именем ds1 и DataTable с именем dt99 со столбцами с именами DataColumn1 и DataColumn2, оба типа string.

enter image description here

Добавить datagridView в основную форму и привязать его к dt99

enter image description here

Так что dt99BindingSource соединяет сетку данных и таблицу данных

enter image description here

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

private void dataGridView1_SelectionChanged (Отправитель объекта, EventArgs e) {

  ds1.dt99Row d= ((ds1.dt99Row)((DataRowView)dt99BindingSource.Current).Row);

  Debug.WriteLine(d.DataColumn1 + " " + d.DataColumn2);

}

Теперь у вас есть строго типизированные переменные (d.DataColumn1 и d.DataColumn2) для доступа к ячейкам, выбранным в представлении данных

Другая интересная особенность заключается в том, что таблица данных, вставленная в набор данных, предоставляет набор открытых классов, которые очень помогают при обработке таблиц данных, например,

        private void Form1_Load(Object sender, EventArgs e)
    {
        ds1.dt99.Adddt99Row("K", "B");
        ds1.dt99.Adddt99Row("L", "D");
        ds1.dt99.Adddt99Row("M", "F");
        ds1.dt99.Adddt99Row("N", "H");

        ds1.dt99Row dr = ds1.dt99.Newdt99Row();
        dr.DataColumn1 = "X";
        dr.DataColumn2 = "Y";
        ds1.dt99.Adddt99Row(dr);

    }
0 голосов
/ 29 ноября 2016

Если вы связали свое представление данных с таблицей или представлением в базе данных, вы можете получить данные как строго типизированный объект.

Этот ответ предназначен для формы Windows, подключенной к базе данных с использованием DataSet во время разработки. Имя примера - DataSet1, имя таблицы - Customer_Info.

// cast the data bound item to DataRowView so you have
// access to "Row", which
// has the actual data for the row in typed fields. 
DataRowView drv = dgv.SelectedRows(0).DataBoundItem as DataRowView;
// run the code and look at the debugger value of drv.Row -- 
// the type will be shown
// which is the type created by the data binding, representing 
// your table or view
//{YourDataSetName.YourTableOrViewType} tmpTableData = drv.Row as {YourDataSetName.YourTableOrViewType};
DataSet1.Customer_InfoRow tmpTableData = drv.Row as DataSet1.Customer_InfoRow;

Эта ссылка является ответом. Надеюсь, я добавил ясности и пример выше. https://social.msdn.microsoft.com/Forums/windows/en-US/f252e395-58e6-4703-ba7b-0740efcbecf3/can-i-convert-the-selected-row-in-a-bound-datagridview-to-a-typed-datarow?forum=winformsdatacontrols

Эта ссылка показывает данные, программно добавленные в источник данных, но не извлекающие эти данные из существующей базы данных. Это дало мне часть пути к ответу: https://msdn.microsoft.com/en-us/library/4wszzzc7(v=vs.110).aspx

0 голосов
/ 29 марта 2016

Вы попробуете это.

DataRow row = gridView1.GetDataRow(gridView1.FocusedRowHandle);
if (row != null) { XtraMessageBox.Show(row["ID"].ToString()); } else return;

...