【问题标题】:How to get Column Value of a DataRow in a Datatable如何在数据表中获取 DataRow 的列值
【发布时间】:2012-01-23 16:37:01
【问题描述】:

我有一个DataTable,它在我的代码中绑定到 dataGridview。

当我从数据库中获取数据时,gridview 工作正常。它充满了数据。 我要做的是获取指定行的主键值。

例如:

PK         Address          Phone
1          xxxyyyzzz...     1234567   
2          aaabbbccc...     2345678

我想要的是这个。用户将点击任何一行,然后点击一个按钮来添加一些东西。 然后我会得到PK值,然后做其他事情。

我该怎么做?

【问题讨论】:

  • 请注意:数据行的索引不是pk的值,可能在您的特殊情况下,但最迟在您删除记录或更改顺序时会有所不同。 你是什么意思:“指定行”?
  • 从数据库中选择数据的时候,是不是在填充数据表之前也选择了pk列?
  • @TimSchmelter 你好,蒂姆。是的,我知道,我需要的是指定行的 PK 值。
  • @Icarus 我编辑了这个问题。请看一看。

标签: c# sql-server winforms datatable datarow


【解决方案1】:

嗯,你能具体说明一下如何以及何时获取这个值吗?

你可以这样做:

int index = dt.Rows.IndexOf(row);

但我不确定这样做有什么意义,如果你已经有指定的行,为什么不能通过row[columnName] 获得PK?

但这比使用 for 循环循环更耗费资源。

在绑定到 dataGridView 之前还是之后需要这个?如果需要从不同的dataGridView行中获取值。

供您修改:

你可以像这样得到选中的行:

if (yourDataViewGrid.SelectedRows.Count == 1) 
{ 
Int pk = yourDataViewGrid.Rows[yourDataViewGrid.SelectedRows[0].Index].Cells["PK"].Value.ToString(); 
} 

如果您通过其他方法(例如使用复选框来选择一行)来执行此操作,您可以这样做:

foreach (DataGridViewRow row in YourDataGridView.Rows)
        {

            if ((Boolean)((DataGridViewCheckBoxCell)row.Cells["CheckBoxName"]).FormattedValue)
            {
               Int pk = rows.Cells["PK"].Value.ToString();
            }

        }

【讨论】:

  • 你好 DOTang。是的,我已经改变了我的问题。是的,我需要从 datagridview 中获取值。
  • @Un_NatMenDim 更新了我的答案。
【解决方案2】:

DataGridView 控件使用 DataView 类绑定到 DataTable。您可以使用这样的东西来获取 DataGridViewRow 的 DataRow

var vrow = (DataRowView)grid.Rows[12].DataBoundItem; // get the bound object
var drow = vrow.Row; // the Row property references the real DataRow

其中 12 是您要查找的索引。有时,将 DataSource 属性显式设置为 DataView 并在表单上保留对它的引用会有所帮助。视图也会知道数据的排序

var view = new DataView(table);
grid.DataSource = view;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多