dataGridView1 两列相乘

aop12a 2011-08-17 10:40:13
private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
if (string.IsNullOrEmpty(dataGridView1.Rows[e.RowIndex].Cells[4].Value.ToString()) || string.IsNullOrEmpty(dataGridView1.Rows[e.RowIndex].Cells[5].Value.ToString()))
return;//没有输入数值时,不要进行计算
// 总数量=数量*串数
if (e.ColumnIndex == 4 || e.ColumnIndex == 5)
{
try
{
dataGridView1.Rows[e.RowIndex].Cells[6].Value = (Convert.ToDecimal(dataGridView1.Rows[e.RowIndex].Cells[4].Value) * Convert.ToDecimal(dataGridView1.Rows[e.RowIndex].Cells[5].Value)).ToString();
}
catch (Exception)
{
MessageBox.Show("请输入数字");
}
}

}

提示错误:
索引超出范围。必须为非负值并小于集合大小。
参数名: index
调试时查看 index的值为-1

已将 AllowUserToAddRows =false;
...全文
172 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xingdengde 2012-05-21
  • 打赏
  • 举报
回复
e.RowIndex,一开始应该怎么定义呢?
aop12a 2011-08-17
  • 打赏
  • 举报
回复

已搞定了,原来是 多了
|| string.IsNullOrEmpty(dataGridView1.Rows[e.RowIndex].Cells[5].Value.ToString()
也就是说只能判断一列,不能判断两列是否为空
private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
if (string.IsNullOrEmpty(dataGridView1.Rows[e.RowIndex].Cells[4].Value.ToString()) ))
//这句不要 || string.IsNullOrEmpty(dataGridView1.Rows[e.RowIndex].Cells[5].Value.ToString()
return;//没有输入数值时,不要进行计算
// 总数量=数量*串数
if (e.ColumnIndex == 4 || e.ColumnIndex == 5)
{
try
{
dataGridView1.Rows[e.RowIndex].Cells[6].Value = (Convert.ToDecimal(dataGridView1.Rows[e.RowIndex].Cells[4].Value) * Convert.ToDecimal(dataGridView1.Rows[e.RowIndex].Cells[5].Value)).ToString();
}
catch (Exception)
{
MessageBox.Show("请输入数字");
}
}

}

aop12a 2011-08-17
  • 打赏
  • 举报
回复
if (e.RowIndex != -1)
{
if (string.IsNullOrEmpty(dataGridView1.Rows[e.RowIndex].Cells[4].Value.ToString()) || string.IsNullOrEmpty(dataGridView1.Rows[e.RowIndex].Cells[5].Value.ToString()))
return;//没有输入数值时,不要进行计算
// 总数量=数量*串数
if (e.RowIndex != -1 && (e.ColumnIndex == 4 || e.ColumnIndex == 5))
{
try
{
dataGridView1.Rows[e.RowIndex].Cells[6].Value = (Convert.ToDecimal(dataGridView1.Rows[e.RowIndex].Cells[4].Value) * Convert.ToDecimal(dataGridView1.Rows[e.RowIndex].Cells[5].Value)).ToString();
}
catch (Exception)
{
MessageBox.Show("请输入数字");
}
}

}
改这样写又出错,e.RowIndex 的值是0
zhao_zps 2011-08-17
  • 打赏
  • 举报
回复

if (e.RowIndex != -1 && (e.ColumnIndex == 4 || e.ColumnIndex == 5))
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 aop12a 的回复:]
已搞定了,原来是 多了
|| string.IsNullOrEmpty(dataGridView1.Rows[e.RowIndex].Cells[5].Value.ToString()
也就是说只能判断一列,不能判断两列是否为空
private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventAr……
[/Quote]

那是逻辑上的问题,有可能是用 && 而不是||
熙风 2011-08-17
  • 打赏
  • 举报
回复
接分。。。

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧