Как получить выбранные значения строк DevExpress XtraGrid?
рассмотрим следующую картину
Я получаю выбранные значения строк в трех текстовых полях, показанных на рисунке, когда я нажимаю ячейку, используя следующий код.
void dataGridView1_CellClick_1(object sender, DataGridViewCellEventArgs e) {
TBGRNo.Text = dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString();
TBSName.Text = dataGridView1.Rows[e.RowIndex].Cells[1].Value.ToString();
TBFName.Text = dataGridView1.Rows[e.RowIndex].Cells[2].Value.ToString();
}
мой вопрос: как я буду делать то же самое в DevExpress XtraGrid control??
7 ответов
Вы можете сделать это несколькими способами. Вы можете использовать привязку данных (типичная инициализация после InitializeComponent ();)
textBox1.DataBindings.Add(new Binding("Text", yourBindingSource,
"TableName.ColumnName", true, DataSourceUpdateMode.OnPropertyChanged));
или используйте DataLayoutControl (если вы собираетесь использовать textbox для редактирования, я действительно рекомендую потратить некоторое время, чтобы узнать, как использовать этот компонент.
или в FocusedRowChanged, назначая из одного из этих методов:
textBox1.Text = gridView1.GetDataRow(e.FocusedRowHandle)["Name"].ToString();
textBox1.Text = gridView1.GetFocusedDataRow()["Name"].ToString();
textBox1.Text = (gridView1.GetFocusedRow() as DataRowView).Row["Name"].ToString();
textBox1.Text = gridView1.GetFocusedRowCellValue("Name").ToString();
вот путь, которым я следовал,
int[] selRows = ((GridView)gridControl1.MainView).GetSelectedRows();
DataRowView selRow = (DataRowView)(((GridView)gridControl1.MainView).GetRow(selRows[0]));
txtName.Text = selRow["name"].ToString();
также вы можете перебирать выбранные строки, используя массив selRows. Вот код описывает, как получить данные только из первой выбранной строки. Вы можете вставить эти строки кода для события click сетки.
Я нашел решение следующим образом:
private void gridView1_RowCellClick(object sender, DevExpress.XtraGrid.Views.Grid.RowCellClickEventArgs e)
{
TBGRNo.Text = gridView1.GetRowCellValue(gridView1.FocusedRowHandle, "GRNo").ToString();
TBSName.Text = gridView1.GetRowCellValue(gridView1.FocusedRowHandle, "SName").ToString();
TBFName.Text = gridView1.GetRowCellValue(gridView1.FocusedRowHandle, "FName").ToString();
}
какую из их сеток вы используете? XtraGrid или AspXGrid? Вот кусок, взятый из одного из моих приложений с помощью XtraGrid.
private void grdContactsView_RowClick(object sender, DevExpress.XtraGrid.Views.Grid.RowClickEventArgs e)
{
_selectedContact = GetSelectedRow((DevExpress.XtraGrid.Views.Grid.GridView)sender);
}
private Contact GetSelectedRow(DevExpress.XtraGrid.Views.Grid.GridView view)
{
return (Contact)view.GetRow(view.FocusedRowHandle);
}
моя сетка имеет список объектов контакта, связанных с ней. Каждый раз подряд нажал загрузить выбранную строку в _selectedContact. Надеюсь, это поможет. Вы найдете много информации об использовании своих элементов управления купить посещение их поддержки и документации сайтов.
Для VB.Net
CType(GridControl1.MainView, GridView).GetFocusedRow()
Для C#
((GridView)gridControl1.MainView).GetFocusedRow();
пример привязки данных linq, поэтому используйте
Dim selRow As CUSTOMER = CType(GridControl1.MainView, GridView).GetFocusedRow()
все, что вам нужно сделать, это использовать GetFocusedRowCellValue метод элемента управления gridView и поместить его в событие RowClick.
например:
private void gridView1_RowClick(object sender, DevExpress.XtraGrid.Views.Grid.RowClickEventArgs e)
{
if (this.gvCodigoNombres.GetFocusedRowCellValue("EMP_dni") == null)
return;
MessageBox.Show(""+this.gvCodigoNombres.GetFocusedRowCellValue("EMP_dni").ToString());
}
var rowHandle = gridView.FocusedRowHandle;
var obj = gridView.GetRowCellValue(rowHandle, "FieldName");
//For example
int val= Convert.ToInt32(gridView.GetRowCellValue(rowHandle, "FieldName"));