我有一个数据网格视图,在其中我可以隐藏或隐藏一些行,在这个过程中,我应该得到第6列单元格的总和(仅来自可见行)我在上下文菜单中写的代码item click事件给我一个例外说:"输入字符串的格式不正确。"在这行代码中:
count += Convert.ToInt32(addSellItemsDgv.Rows[row.Index].Cells[6].Value.ToString());
上下文菜单项单击事件的代码:
private void toolStripMenuItem2_Click(object sender, EventArgs e)
{
foreach (DataGridViewRow row in addSellItemsDgv.SelectedRows)
{
CurrencyManager currencyManager1 = (CurrencyManager)BindingContext[addSellItemsDgv.DataSource];
currencyManager1.SuspendBinding();
addSellItemsDgv.CurrentCell = null;
row.Visible = false;
}
addSellItemsDgv.Refresh();
int count = 0;
if (addSellItemsDgv.Rows.GetRowCount(DataGridViewElementStates.Visible) > 0)
{
foreach (DataGridViewRow row in addSellItemsDgv.Rows)
{
if (row.Visible == true)
{
count += Convert.ToInt32(addSellItemsDgv.Rows[row.Index].Cells[6].Value.ToString());
}
}
addSellTtlCostLbl.Text = count.ToString();
}
else
{
addSellTtlCostLbl.Text = "0";
}
}
答案 0 :(得分:0)
尽管我们在这里缺少更多的上下文,我想Convert.ToInt32
要么接收字母数字值,要么接收超过Int32的值。请仔细检查您传递给Convert.ToInt32
的字符串值,并事先尝试Trim
字符串。
另外,我建议使用Int32.TryParse
。这将帮助您防止此异常并验证用户输入。
答案 1 :(得分:0)
我通过转换ToDouble而不是ToInt32并使用行对象而不是Rows [row.Index] :)来解决它。
private void toolStripMenuItem2_Click(object sender, EventArgs e)
{
foreach (DataGridViewRow row in addSellItemsDgv.SelectedRows)
{
CurrencyManager currencyManager1 = (CurrencyManager)BindingContext[addSellItemsDgv.DataSource];
currencyManager1.SuspendBinding();
addSellItemsDgv.CurrentCell = null;
row.Visible = false;
}
addSellItemsDgv.Refresh();
double count = 0;
if (addSellItemsDgv.Rows.GetRowCount(DataGridViewElementStates.Visible) > 0)
{
foreach (DataGridViewRow row in addSellItemsDgv.Rows)
{
if (row.Visible == true)
{
count += Convert.ToDouble(row.Cells[6].FormattedValue.ToString());
}
}
addSellTtlCostLbl.Text = count.ToString();
}
else
{
addSellTtlCostLbl.Text = "0";
}
}