1。)***好的,所以我有从Excel SpreadSheet导入的DataTable并且它已被填充。我想筛选DataTable并对每一行求和。我必须跳过第一栏和第一行因为它们是标签。我试图到达表中的每一行并将其总计并输出到“行总计”列。当我尝试分配'number'变量以尝试对每个单元格求和时,我收到“指定的无效转换”值。
例:
Row(0)-------------------- ItemA ...... ItemB ....... ItemC .......... .... RowTotal
专栏(1)CompanyA ..... 12 .......... 12 ............. 10 ........... ......... 34
2。)另外,我还没有达到 - 我尝试将其输出到DataTable的最后一栏可能存在问题。
注意到: dr [dt.Columns.Count - 1] = Convert.ToInt32(sum);
有任何想法或建议吗?
DataRow dr = dt.NewRow();
int sum = 0;
dt.Columns.Add("Row Totals", typeof(int));
for (int i = 0; i < dt.Columns.Count; i++)
{
if (dt.Columns[i].ColumnName == "Client")
{
dt.Columns.Cast<DataColumn>().Skip(1);
}
else
{
for (int j = 0; j < dt.Rows.Count - 1; j++)
{
dt.Rows.Cast<DataRow>().Skip(1);
int number =0;
number = (dt.Rows[j].Field<int>(i));
sum += number;
dr[dt.Columns.Count - 1] = Convert.ToInt32(sum);
Console.WriteLine("Row : {0} , Column : {1} , Value : {2}", i,j, dt.Rows[i][j].ToString());
Console.WriteLine(sum);
}
Console.ReadLine();
}
}
更新:12/27/12 * ** * ** * ** * **
所以,我正在尝试的解决方案是跳过我知道的文本行和列。当它试图过滤每个单元格并对其求和时,我仍然得到“指定的强制转换无效”。还有其他建议吗?
提前谢谢。
DataRow dr = dt.NewRow();
int sum = 0;
int number = 0;
for (int i = 0; i < dt.Columns.Count-1; i++)
{
if (dt.Columns[i].ColumnName == "column1")
{
dt.Columns.Cast<DataColumn>().Skip(0);
}
if (dt.Columns[i].ColumnName == "column2")
{
dt.Columns.Cast<DataColumn>().Skip(1);
}
else
{
for (int j = 0; j < dt.Rows.Count; j++)
{
dt.Rows.Cast<DataRow>().Skip(0);
dt.Rows.Cast<DataRow>().Skip(1);
//if (number != -1 && number != 0)
//{
number = (dt.Rows[j].Field<int>(i));
sum += number;
dr[dt.Rows.Count] = Convert.ToInt32(sum);
//}
//else
//{
// number = 0;
//}
Console.WriteLine("Row : {0} , Column : {1} , Value : {2}", i, j, dt.Rows[i][j].ToString());
Console.WriteLine(sum);
}
Console.ReadLine();
dataGridView1.DataSource = dt;
}
* *更新12/27下午1:30
我已经抓了所有以前的代码,我正在尝试测试表和输出。它似乎工作除了现在,当我将它们添加到最后一行时,我似乎无法将项目总计得到。我陷入了代码的“其他”部分。
for (int i = 0; i < dt.Columns.Count - 2; i++)
{
for (int j = 0; j < dt.Rows.Count - 1; j++)
{
string value = dt.Rows[i][j].ToString();
int num = 0;
bool res = int.TryParse(value, out num);
if (res == false)
{
num = 0;
}
else
{
int sum = 0;
sum += num;
DataRow dr;
dr["Totals"] = sum;
dt.Rows.Add(dr);
}
}
dataGridView1.DataSource = dt;
}
}
答案 0 :(得分:1)
一种可能性是数据表中存在空值 - 您无法将空对象转换为整数,因此Field扩展方法可能会失败。