关于C#中datagridview 列计算问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于C#中datagridview 列计算问题相关的知识,希望对你有一定的参考价值。

如图:

每天会有若干记录的数据,并填写到表中,当数据填写完毕后,点击计算,就可以算出“合计数”、“不良率”。
1、合计数=不良数之和。计算完之后,结果放在当天日期,合计数所在列,第一行。
2、其中检验总数是手动输入的。
我现在就是困扰在,如果把计算当天的结果,放在第一行。以及列中的数据,如果去计算。求高手指点

sql语句实现,按日期分组统计不良数总和,如:
select sum(badcount) as buliangshu from table where date between '2013-03-28' and '2013-03-29' group by date追问

能不能帮忙写一下详细代码呢,我对这个不熟。

追答

我汗~~
你把表结构贴出来,我帮你写sql语句
至于代码还是你自己写吧

追问

这是在数据库中所建的表,麻烦把计算语句写下来。非常感谢。

追答

1.子查询中按日期分组统计不良数
2.主表左连接子查询公用日期字段,再按照日期升序排序,得到想要的结果
select * from tongji a left join
(
select convert(varchar(10),riqi,121) as riqi,sum(buliangshu) as buliangshu from tongji
where convert(varchar(10),riqi,121) between '2013-03-28' and '2013-03-29' group by convert(varchar(10),riqi,121)
) as b on convert(varchar(10),a.riqi,121) = convert(varchar(10),b.riqi,121) order by a.riqi

参考技术A 应该可以用一个if判断一下相同日期的行数再用for循环吧
再在前面写一个加法的函数,直接调用。?
参考技术B 这个应该到数据库那端去实现吧追问

不管在哪里实现,只要能够计算出正确结果,都可以。能不能说一下,个体怎么操作呢?

追答

sql查询语句 在数据库那里直接用计算和的函数 我对sql语句不刷很擅长 不过肯定可以实现的

c# winform datagridview cellendedit 在datagridview的第一列输入编码,第二,三列自动取值,名称和规格

据库中已经有基础资料
编码 名称 规格
1122 杯子 330
2233 螺丝 317
.... ... ...
... ... ...
制作一张进仓单,在
datagridview的第一列输入编码1122,第二列和第三列会自动取值,
string sql = "select * from base_wl where wlno='" + dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString() +"'";
DataSet dk = new DataSet();
SqlDataAdapter db = new SqlDataAdapter(sql, con);
db.Fill(dk);
dataGridView1.DataSource = dk.Tables[0];
这样只能在第一行里输入后datagridview显示,当我在第二行继续输入编码的时候,还是会跳到datagridview第一行显示我第二次输入的编码和第二列和第三列的信息
不知道怎么存储多条的信息在datagridview显示

完整的代码比较麻烦,我这里提供一个思路

1、使用CellEndEdit事件。在事件中,e.ColumnIndex 和e.RowIndex 指示了你刚刚编辑的是哪一个单元格;
2、 大体代码如下:
if(e.ColumnIndex != 0)
return;
string sql = "select * from base_wl where wlno='" + dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString() +"'";
DataSet dk = new DataSet();
SqlDataAdapter db = new SqlDataAdapter(sql, con);
db.Fill(dk);
dataGridView1.Rows[e.RowIndex].Cells[e.1] = db.Tables[0].Rows[0]["你要取得的字段"].ToString(); //给第二列赋值
dataGridView1.Rows[e.RowIndex].Cells[e.1] = db.Tables[0].Rows[0]["你要取得的字段"].ToString(); //给第三列赋值追问

if(e.ColumnIndex != 0)
这句是一个循环?
datagridview不断的循环绑定?
datagridview 绑定哪个数据源,给个思路,怎么弄?

我输入第一行记录后,datagridview就显示我刚才输入的那条记录
当我到第二行记录输入的时候,datagridview就只显示我第二次输入的记录

追答

if不是循环,而是在cellendedit事件里面首先判断一下“刚刚完成编辑的如果不是第一列,那么跳出”

你用我给你的代码放到cellendedit事件里面看看效果不就知道了。基本上是全得了。当然,“]["你要取得的字段"].”得改成你的字段名。

参考技术A 在工具箱中点击右键,选择添加,然后把webbrowser控件添加进来,再把webbrowser控件拖到你程序中就有axwebbrowser控件了 参考技术B 这个
不要重新绑定数据源
也无需绑定数据源
根据每行编码 查询当前行数据,进行当前行数据的绑定。
dataGridView1.DataSource = dk.Tables[0];将整个datagridview刷新了,能不跳到第一行吗?
参考技术C 你加的事件不对吧追问

可以给个例子吗?
重要的代码,也可以了

以上是关于关于C#中datagridview 列计算问题的主要内容,如果未能解决你的问题,请参考以下文章

c#求怎么设置datagridview的列宽

C# WinForm DataGridView 给标题列增加序号及格式化某个字段

请问如何在C#的dataGridView的第i行第j列显示i和j的表达式的计算值?

C#中dataGridView的列顺序问题

C# 更改 DataGridView 中的列标题

如何使用 C# 在 datagridview 控件中显示某些表架构列?