【问题标题】:How to get the selected row values of DevExpress XtraGrid?如何获取 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 控件中做同样的事情??

【问题讨论】:

    标签: c# winforms 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.你能回答这个stackoverflow.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 中。希望这可以帮助。访问他们的支持和文档网站,您会发现很多关于使用他们的控件的信息。

          【讨论】:

          • 找到解决方案后,我自己回答了我的问题。无论如何,非常感谢
          猜你喜欢
          • 1970-01-01
          • 2016-01-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-11-30
          • 2011-01-04
          • 1970-01-01
          相关资源
          最近更新 更多