C# 计算每个id以及每个期间、月份和年份的行数
我想显示一个DataGridView,其中包含Compte名称以及每月和每年的Recette和Depense的总和。 我有一个一年一个月定制的DateTimePicker 示例:如果我选择日期=2015年11月(2015年11月),它将显示如下C# 计算每个id以及每个期间、月份和年份的行数,c#,sql-server,datagridview,C#,Sql Server,Datagridview,我想显示一个DataGridView,其中包含Compte名称以及每月和每年的Recette和Depense的总和。 我有一个一年一个月定制的DateTimePicker 示例:如果我选择日期=2015年11月(2015年11月),它将显示如下 Compte Total BTK 633,000 Biat 987,888 Caisse 988,875 Compte Total BTK 0 Biat 653,256 Caisse 88,145 如果
Compte Total
BTK 633,000
Biat 987,888
Caisse 988,875
Compte Total
BTK 0
Biat 653,256
Caisse 88,145
如果我选择日期=2016年6月(2016年6月),它将显示如下
Compte Total
BTK 633,000
Biat 987,888
Caisse 988,875
Compte Total
BTK 0
Biat 653,256
Caisse 88,145
我的代码:
public partial class ComptesMois : Form
{
SqlConnection conn;
SqlCommand comm;
SqlDataReader dreader;
string connstring = "Data Source=.;Initial Catalog=Tresorerie;Integrated Security=True";
public ComptesMois()
{
InitializeComponent();
//Set Columns Count
DataGridViewCompteMois.ColumnCount = 2;
//Hide the last blank line
DataGridViewCompteMois.AllowUserToAddRows = false;
//Add Columns
DataGridViewCompteMois.Columns[0].Name = "NomCom";
DataGridViewCompteMois.Columns[0].HeaderText = "Nom de Compte";
DataGridViewCompteMois.Columns[0].DataPropertyName = "NomCom";
DataGridViewCompteMois.Columns[0].Width = 100;
//Add Columns
DataGridViewCompteMois.Columns[1].Name = "Total";
DataGridViewCompteMois.Columns[1].HeaderText = "Total";
DataGridViewCompteMois.Columns[1].DataPropertyName = "Total";
DataGridViewCompteMois.Columns[1].Width = 100;
this.BindGrid();
CompteMoisdateTimePicker.Format = DateTimePickerFormat.Custom;
CompteMoisdateTimePicker.CustomFormat = "MM yyyy";
//CompteMoisdateTimePicker.ShowUpDown = true; // to prevent the calendar from being displayed
}
private void BindGrid()
{
DataGridViewCompteMois.DataSource = null;
using (SqlConnection con = new SqlConnection(connstring))
{
using (SqlCommand cmd = new SqlCommand("select DISTINCT c.NomCom from Tresorerie t join Compte c on t.IdCom=c.IdCom", con))
{
cmd.CommandType = CommandType.Text;
using (SqlDataAdapter sda = new SqlDataAdapter(cmd))
{
using (DataTable dt = new DataTable())
{
sda.Fill(dt);
DataGridViewCompteMois.DataSource = dt;
}
}
}
}
}
private void DataGridViewCompteMois_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
string month = CompteMoisdateTimePicker.Value.Month.ToString();
string year = CompteMoisdateTimePicker.Value.Year.ToString();
//select * from < table > where month(searchDate) = Month_from_box and Year(searchDate) = Year_from_box
// select sum(recette + depence) from Tresorerie where
String total;
for (int i = 0; i < DataGridViewCompteMois.Rows.Count; i++)
{
conn = new SqlConnection(connstring);
conn.Open();
String NomCompteDataGrid = Convert.ToString(DataGridViewCompteMois.Rows[i].Cells[0].Value);
String IdCompteValue = "select IdCom from Compte where NomCom='" + NomCompteDataGrid + "'";
comm = new SqlCommand(IdCompteValue, conn);
int IdComValue = Convert.ToInt32(comm.ExecuteScalar());
conn.Close();
using (SqlConnection con = new SqlConnection(connstring))
{
using (SqlCommand cmd = new SqlCommand("select sum(Recette + Depense) as Total from Tresorerie where IdCom=@IdCom GROUP BY Recette,Depense", con))
{
cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue("@IdCom", IdComValue);
con.Open();
total = Convert.ToString(cmd.ExecuteNonQuery());
con.Close();
}
}
DataGridViewCompteMois.Rows[i].Cells[1].Value = total;
}
}
}
公共部分类ComptesMois:表单
{
SqlConnection-conn;
SqlCommand;
SqlDataReader恐惧者;
string connstring=“数据源=;初始目录=目录;集成安全性=真”;
公共公司()
{
初始化组件();
//设置列数
DataGridViewCompteMois.ColumnCount=2;
//隐藏最后一个空行
DataGridViewCompteMois.AllowUserToAddress=false;
//添加列
DataGridViewCompteMois.Columns[0]。Name=“NomCom”;
DataGridViewCompteMois.Columns[0]。HeaderText=“Nom de Compte”;
DataGridViewCompteMois.Columns[0].DataPropertyName=“NomCom”;
DataGridViewCompteMois.Columns[0]。宽度=100;
//添加列
DataGridViewCompteMois.Columns[1].Name=“Total”;
DataGridViewCompteMois.Columns[1].HeaderText=“Total”;
DataGridViewCompteMois.Columns[1].DataPropertyName=“Total”;
DataGridViewCompteMois.Columns[1]。宽度=100;
这个.BindGrid();
CompteMoisdateTimePicker.Format=DateTimePickPerformat.Custom;
CompteMoisdateTimePicker.CustomFormat=“MM yyyy”;
//CompteMoisdateTimePicker.ShowUpDown=true;//防止显示日历
}
私有void BindGrid()
{
DataGridViewCompteMois.DataSource=null;
使用(SqlConnection con=newsqlconnection(connstring))
{
使用(SqlCommand cmd=newsqlcommand(“从树中选择DISTINCT c.NomCom t在t.IdCom=c.IdCom上加入Compte c”,con))
{
cmd.CommandType=CommandType.Text;
使用(SqlDataAdapter sda=newsqldataadapter(cmd))
{
使用(DataTable dt=newdatatable())
{
sda.填充(dt);
DataGridViewCompteMois.DataSource=dt;
}
}
}
}
}
私有void DataGridViewCompteMois_CellContentClick(对象发送者,DataGridViewCellEventArgs e)
{
字符串month=CompteMoisdateTimePicker.Value.month.ToString();
字符串year=CompteMoisdateTimePicker.Value.year.ToString();
//选择*from其中月(searchDate)=月(from)和年(searchDate)=年(from)
//从Tresorerie中选择sum(接收+依赖),其中
字符串总数;
对于(int i=0;i
但是有一个错误,结果显示每个Compte为-1
更新1:多亏了@Soner_Gönül,我修改了查询语句,并在sql上测试了它,它工作了,但当我将结果添加到网格单元格时,问题显示为空,但我尝试用messgae box显示它,它工作了,我的代码:
String total;
private void CompteMoisdateTimePicker_ValueChanged(object sender, EventArgs e)
{
string month = CompteMoisdateTimePicker.Value.Month.ToString();
string year = CompteMoisdateTimePicker.Value.Year.ToString();
for (int i = 0; i < DataGridViewCompteMois.Rows.Count; i++)
{
conn = new SqlConnection(connstring);
conn.Open();
String NomCompteDataGrid = Convert.ToString(DataGridViewCompteMois.Rows[i].Cells[0].Value);
String IdCompteValue = "select IdCom from Compte where NomCom='" + NomCompteDataGrid + "'";
comm = new SqlCommand(IdCompteValue, conn);
int IdComValue = Convert.ToInt32(comm.ExecuteScalar());
conn.Close();
using (SqlConnection con = new SqlConnection(connstring))
{
using (SqlCommand cmd = new SqlCommand("select SUM( Depense + Recette ) from Tresorerie where IdCom=@IdCom and MONTH(DateTre) = @MONTH AND YEAR(DateTre) = @YEAR GROUP BY IdCom", con))
{
cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue("@IdCom", IdComValue);
cmd.Parameters.AddWithValue("@MONTH", month);
cmd.Parameters.AddWithValue("@YEAR", year);
con.Open();
total = Convert.ToString(cmd.ExecuteScalar());
con.Close();
}
}
DataGridViewCompteMois.Rows[i].Cells["Total"].Value = total;
//MessageBox.Show(total.ToString());
}
}
字符串总数;
私有void CompteMoisdateTimePicker_值已更改(对象发送方,事件参数e)
{
字符串month=CompteMoisdateTimePicker.Value.month.ToString();
字符串year=CompteMoisdateTimePicker.Value.year.ToString();
对于(int i=0;i
更新解决方案:看,我有一个问题,选择哪个单元格,这个cod