如何获取 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 中获得单击的单元格列

DevExpress XtraGrid如何使单元格只读?

如何在GridControl中显示图片列?控件DevExpress.XtraGrid.GridControl中显示图片列。

DevExpress XtraGrid 格式 - 如何将所有负数括在括号中

DevExpress.XtraGrid.GridControl 实现自定义tooltip

vs 2010 用vb ,DevExpress.XtraGrid.view.gridview 如何设置某字段为只读,但新增行数据该字段为可写。