如何获取 DevExpress XtraGrid 的选定行值?
Posted
技术标签:
【中文标题】如何获取 DevExpress XtraGrid 的选定行值?【英文标题】:How to get the selected row values of DevExpress XtraGrid? 【发布时间】:2012-09-27 13:49:15 【问题描述】:考虑下图
当我使用以下代码单击单元格时,我会在图中所示的三个文本框中获取选定的行值。
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 控件中做同样的事情??
【问题讨论】:
【参考方案1】:var rowHandle = gridView.FocusedRowHandle;
var obj = gridView.GetRowCellValue(rowHandle, "FieldName");
//For example
int val= Convert.ToInt32(gridView.GetRowCellValue(rowHandle, "FieldName"));
【讨论】:
虽然这段代码 sn-p 可以解决问题,但including an explanation 确实有助于提高帖子的质量。请记住,您正在为将来的读者回答问题,而这些人可能不知道您的代码建议的原因。 From review.【参考方案2】:您可以通过多种方式做到这一点。可以使用数据绑定(一般在 InitializeComponent(); 之后初始化)
textBox1.DataBindings.Add(new Binding("Text", yourBindingSource,
"TableName.ColumnName", true, DataSourceUpdateMode.OnPropertyChanged));
或者使用DataLayoutControl(如果你打算使用文本框进行编辑,我真的建议花一些时间来学习如何使用这个组件。
或在 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();
【讨论】:
【参考方案3】:你所要做的就是使用gridView控件的GetFocusedRowCellValue方法并将其放入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());
【讨论】:
【参考方案4】:对于 VB.Net
CType(GridControl1.MainView, GridView).GetFocusedRow()
对于 C#
((GridView)gridControl1.MainView).GetFocusedRow();
使用 linq 绑定数据示例
Dim selRow As CUSTOMER = CType(GridControl1.MainView, GridView).GetFocusedRow()
【讨论】:
【参考方案5】:这是我遵循的方式,
int[] selRows = ((GridView)gridControl1.MainView).GetSelectedRows();
DataRowView selRow = (DataRowView)(((GridView)gridControl1.MainView).GetRow(selRows[0]));
txtName.Text = selRow["name"].ToString();
您还可以使用 selRows 数组遍历选定的行。这里的代码描述了如何只从第一个选定的行获取数据。您可以将这些代码行插入到网格的单击事件中。
【讨论】:
看看我自己对我的问题的回答。这可能更简单,更容易 是的,您的回答更简单。但我试图从所有选定的行(多选)中获取详细信息。所以我改变了这个答案以匹配你的问题。所以谢谢你的回答。我希望这可能对某人有所帮助! @kashif 你不必刻薄地表明你的答案更适合你的情况。 如何在 wpf.你能回答这个***.com/questions/32393926 对不起卡西夫。我不再使用 DevExpress。希望您能尽快得到另一位 DevExpress 专家的答复。【参考方案6】:我找到了如下解决方案:
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();
【讨论】:
这项工作 100% ... 感谢 Kashif【参考方案7】:您使用的是他们的哪一个网格? 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 中。希望这可以帮助。访问他们的支持和文档网站,您会发现很多关于使用他们的控件的信息。
【讨论】:
找到解决方案后,我自己回答了我的问题。无论如何,非常感谢以上是关于如何获取 DevExpress XtraGrid 的选定行值?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 DevExpress XtraGrid 中获得单击的单元格列
如何在GridControl中显示图片列?控件DevExpress.XtraGrid.GridControl中显示图片列。
DevExpress XtraGrid 格式 - 如何将所有负数括在括号中
DevExpress.XtraGrid.GridControl 实现自定义tooltip
vs 2010 用vb ,DevExpress.XtraGrid.view.gridview 如何设置某字段为只读,但新增行数据该字段为可写。