DataGridView,获取所选行的第一列的值

时间:2014-06-07 13:10:50

标签: c# datagridview

我想知道在DataGridView行中获取第一列值的最有效方法是什么。

目前,我正在使用此代码:

List<string> SelectedRows = new List<string>();
foreach (DataGridViewRow r in dgv.SelectedRows)
{
    SelectedRows.Add(r.Cells[0].Value.ToString());
}

int index = Convert.ToInt32(SelectedRows[0]);

这很好用;但是,有更有效的选择吗?

4 个答案:

答案 0 :(得分:4)

&#34;效率最高&#34;通常是主观的。我不知道以下代码比您已经获得的代码更快或更短,但它是我更喜欢使用的方法。

如果您尝试获取特定列中所有值的列表,请尝试以下操作:

var results = dataGridView1.SelectedRows
                           .Cast<DataGridViewRow>()
                           .Select(x => Convert.ToString(x.Cells[0].Value));

如果您一次只允许一个选定的行,并且想要转换特定的单元格,请尝试以下操作:

var index = Convert.ToInt32(dataGridView1.CurrentRow.Cells[0].Value);

答案 1 :(得分:2)

我使用答案中给出的代码进行了一些性能测试。每种方法的平均时间超过1.000.000次:

我的原始代码:

List<string> SelectedRows = new List<string>();
foreach (DataGridViewRow r in dgv.SelectedRows)
{
    SelectedRows.Add(r.Cells[0].Value.ToString());
}

int index = Convert.ToInt32(SelectedRows[0]);

时间= 0,0159毫秒

var results = dataGridView1.SelectedRows
                           .Cast<DataGridViewRow>()
                           .Select(x => Convert.ToString(x.Cells[0].Value));

时间= 0,0152毫秒

var index = Convert.ToInt32(dataGridView1.CurrentRow.Cells[0].Value);

仅限单选:0,0013438 ms

List<string> SelectedRows = new List<string>();
for (int count = 0; count < dgv.SelectedRows.Count; count++)
{
    SelectedRows.Add(dgv.SelectedRows[count].Cells[0].Value.ToString());
}
int index = Convert.ToInt32(SelectedRows[0]);

时间= 0,0057毫秒

答案 2 :(得分:1)

从Patrick Smacchia&#39; s Blog复制此内容:

The fact that for is more efficient than foreach results from the fact that foreach is using an enumerator object behind the scene.

我更喜欢使用for循环而不是foreach循环,for循环最好比foreach循环更快,而不需要对每个元素执行某些操作,并且可以通过使用索引解决您的问题,如下所示:

List<string> SelectedRows = new List<string>();
for (int count = 0; count < dgv.SelectedRows.Count; count++)
{
    SelectedRows.Add(dgv.SelectedRows[count].Cells[0].Value.ToString());
}
int index = Convert.ToInt32(SelectedRows[0]);

答案 3 :(得分:1)

要获取所选行的第一列的值,在dataGridView的contentClick中我们可以放置此代码,并且该值可以保存在id变量中

  private void datagridview1_CellContentClick(object sender, DataGridViewCellEventArgs e)
            {

             var id = Convert.ToInt32(datagridview1.Rows[e.RowIndex].Cells[0].Value);
            }