我想知道在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]);
这很好用;但是,有更有效的选择吗?
答案 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);
}