dataInfo.sp_no = bfdh.Text = dataGridView1.Rows[i].Cells[2].Value.ToString(); 报错
时间: 2024-05-18 13:12:12 浏览: 182
这段代码的错误可能是多种原因导致的,需要进一步分析。根据报错信息,可能是其中某个属性或方法没有正确调用或声明。建议你先检查以下几个方面:
1. `dataInfo` 是否已经实例化。
2. `bfdh` 是否已经实例化。
3. `dataGridView1` 是否已经正确绑定数据。
4. `i` 是否超出了 `dataGridView1` 的行数范围。
5. `Cells[2]` 是否存在于 `dataGridView1` 的每一行中。
6. `Value` 是否存在于 `Cells[2]` 对象中。
你可以根据报错信息进一步调试,或者将代码片段及报错信息分享出来,便于更好地帮助你解决问题。
相关问题
dataInfo = new DeviceManage.设备报废(); for (int i = 0; i < dataGridView1.Rows.Count; i++) { if (dataGridView1.Rows[i].Selected == true) { if (isadmin == "1") { if (dataGridView1.Rows[i].Cells[0].Value == null) { dataInfo.sp_no = bfdh.Text = dataGridView1.Rows[i].Cells[2].Value.ToString(); dataInfo.login_no = yhbh.Text = dataGridView1.Rows[i].Cells[3].Value.ToString(); dataInfo.dev_no = sbbh.Text = dataGridView1.Rows[i].Cells[4].Value.ToString(); dataInfo.sp_why = bfyy.Text = dataGridView1.Rows[i].Cells[5].Value.ToString(); dataInfo.remark = bz.Text = dataGridView1.Rows[i].Cells[6].Value.ToString(); } 改成foreach
将上面的代码改为foreach循环,可以按照如下方式实现:
```
dataInfo = new DeviceManage.设备报废();
foreach (DataGridViewRow row in dataGridView1.SelectedRows)
{
if (isadmin == "1")
{
if (row.Cells[0].Value == null)
{
dataInfo.sp_no = bfdh.Text = row.Cells[2].Value.ToString();
dataInfo.login_no = yhbh.Text = row.Cells[3].Value.ToString();
dataInfo.dev_no = sbbh.Text = row.Cells[4].Value.ToString();
dataInfo.sp_why = bfyy.Text = row.Cells[5].Value.ToString();
dataInfo.remark = bz.Text = row.Cells[6].Value.ToString();
}
}
}
```
这样就可以遍历选中的DataGridView行,将每一行的数据存入对应的变量中。
dataInfo = new DeviceManage.设备采购(); foreach (DataGridViewRow row in dataGridView1.Rows) { if (row.Selected == true) { if (isadmin == "1") { if (row.Cells[0].Value == null) { dataInfo.buy_no = cgdh.Text = dataGridView1.Rows[i].Cells[2].Value.ToString(); dataInfo.login_no = yhbh.Text = dataGridView1.Rows[i].Cells[3].Value.ToString(); dataInfo.dev_name = xbmc.Text = dataGridView1.Rows[i].Cells[4].Value.ToString(); dataInfo.dev_model = xbxh.Text = dataGridView1.Rows[i].Cells[5].Value.ToString(); dataInfo.gys_name = gys.Text = dataGridView1.Rows[i].Cells[6].Value.ToString(); dataInfo.buy_date = dateTimePicker1.Text = dataGridView1.Rows[i].Cells[7].Value.ToString(); dataInfo.price = dj.Text = dataGridView1.Rows[i].Cells[8].Value.ToString(); dataInfo.num = sl.Text = dataGridView1.Rows[i].Cells[9].Value.ToString(); }
将上述代码中的 `for` 循环改为 `foreach` 循环,并将代码中的索引变量 `i` 替换为 `row.Index`,可以使用以下代码:
```csharp
dataInfo = new DeviceManage.设备采购();
foreach (DataGridViewRow row in dataGridView1.Rows)
{
if (row.Selected == true)
{
if (isadmin == "1")
{
if (row.Cells[0].Value == null)
{
dataInfo.buy_no = cgdh.Text = row.Cells[2].Value.ToString();
dataInfo.login_no = yhbh.Text = row.Cells[3].Value.ToString();
dataInfo.dev_name = xbmc.Text = row.Cells[4].Value.ToString();
dataInfo.dev_model = xbxh.Text = row.Cells[5].Value.ToString();
dataInfo.gys_name = gys.Text = row.Cells[6].Value.ToString();
dataInfo.buy_date = dateTimePicker1.Text = row.Cells[7].Value.ToString();
dataInfo.price = dj.Text = row.Cells[8].Value.ToString();
dataInfo.num = sl.Text = row.Cells[9].Value.ToString();
}
}
}
}
```
在 `foreach` 循环中,`row` 直接表示集合中的每个元素,可以直接使用 `row.Cells[0]` 访问该行中的第一列单元格。使用 `row.Index` 可以获取当前行的索引。注意,`foreach` 循环中的变量是只读的,不能修改它们的值,因此需要使用 `row.Index` 来代替原来的索引变量 `i`。
阅读全文