C# 从daily_sale表计算并显示仅一个月(当月)的销售额

C# 从daily_sale表计算并显示仅一个月(当月)的销售额,c#,sql-server,C#,Sql Server,我正在尝试为我的零售店创建一个桌面应用程序 在这个应用程序中,我想计算正在运行的一个月的每日销售额,并计算月、年等的总销售额 每日销售表截图: 我相信这会计算每天的销售额,并显示从一天到最后一天的入境。但我只想显示本月的销售情况,并在开始时显示下个月的销售情况 cmd = new SqlCommand("Select * from Daily_Sale ", con); adapt = new SqlDataAdapter(); adapt.SelectCommand = cmd; dt

我正在尝试为我的零售店创建一个桌面应用程序

在这个应用程序中,我想计算正在运行的一个月的每日销售额,并计算月、年等的总销售额

每日销售表截图:

我相信这会计算每天的销售额,并显示从一天到最后一天的入境。但我只想显示本月的销售情况,并在开始时显示下个月的销售情况

cmd = new SqlCommand("Select * from Daily_Sale ", con);

adapt = new SqlDataAdapter();
adapt.SelectCommand = cmd;

dt = new DataTable();
adapt.Fill(dt);

bsource = new BindingSource();
bsource.DataSource = dt;
dataGridView1.DataSource = bsource;

chart1.Series["Sale"].XValueMember = "Total_Sale";
chart1.Series["Sale"].YValueMembers = "Total_Sale";
chart1.Series["Profit"].XValueMember = "Total_Profit";
chart1.Series["Profit"].YValueMembers = "Total_sale";
chart1.Series["Margin"].XValueMember = "Margin";
chart1.Series["Margin"].YValueMembers = "Total_sale";

chart1.DataSource = hJSportsDataSet8.Daily_Sale;
chart1.DataBind();

cmd = con.CreateCommand();
cmd.CommandText = "Select * from Daily_Sale ";

SqlDataReader reader = cmd.ExecuteReader();

while (reader.Read())
{
    chart1.Series["Sale"].XValueMember = "Date_Time";
    chart1.Series["Sale"].YValueMembers = "Total_Sale";
    chart1.Series["Profit"].XValueMember = "Date_Time";
    chart1.Series["Profit"].YValueMembers = "Total_Profit";
    chart1.Series["Margin"].XValueMember = "Date_Time";
    chart1.Series["Margin"].YValueMembers = "Margin";
}

void DailySaleFormcs_Load(object sender, EventArgs e)
{
    // TODO: This line of code loads data into the 'hJSportsDataSet8.Daily_Sale' table. You can move, or remove it, as needed.
    this.daily_SaleTableAdapter.Fill(this.hJSportsDataSet8.Daily_Sale);

    try
    {
        //MessageBox.Show("today:"+tody);
        cmd = new SqlCommand("SELECT TOP 1 Total_Sale FROM Daily_Sale ORDER BY Date_Time", con);
        cmd.ExecuteNonQuery();

        double tdy_sele = (double)cmd.ExecuteScalar();
        //MessageBox.Show("todays sale" + tdy_sele);
        label_tody.Text = tdy_sele.ToString();

        cmd2 = new SqlCommand("SELECT SUM(Total_Sale) FROM Daily_Sale", con);
        cmd2.ExecuteNonQuery();

        double sum = (double)cmd2.ExecuteScalar();
        // MessageBox.Show("sum :" + sum);
        label_totlsale.Text = sum.ToString();

        cmd = new SqlCommand("SELECT SUM(Total_Profit) FROM Daily_Sale", con);
        cmd.ExecuteNonQuery();
        int proft = (int)cmd.ExecuteScalar();
        label_proft.Text = proft.ToString();
我想试试下面的方法

DateTime dat = DateTime.Today;
MessageBox.Show("today"+dat);
DateTime dayone = new DateTime(dat.AddMonths(1).Year, dat.AddMonths(1).Month, 1);
MessageBox.Show("first day of next month:"+dayone);
但如何使用while、for循环或if条件或其他


请帮助我

我不知道您的datatable在数据库中的确切外观,但仅使用以下查询(和代码)获取给定月份(在您的情况下为当前月份)的数据:

更新

在评论中进行了一点讨论后,我清楚地了解了OP的情况,我认为这就是您想要的:

  ////A class to handle the data of the database

  public class mydata()
  {
    public string name;
    public string dates;
    ///create required variables of required type for each column :)
  }
现在,我们可以使用
IDataReader
,它将帮助我们仅获取所需数据,还可以使用
列表
,它将保存过滤后的数据:

  List<mydata> filteredData = new List<mydata>();
  ///As OP commented,the date/time look like :  Saturday, April 14, 2018
  string m0nth = "August" 
  //Or      
  string month = DateTime.Now.Month.ToString()
  cmd = new SqlCommand("Select * from Daily_Sale ", con);
  SqlDataReader dr = cmd.ExecuteReader()
  While (dr.Reader())
   {
    string mnth = dr[2].ToString().Split(', ',', ')[0];  ///change 2 with the column count of the date column
    string finalMonth = mnth.Split(" ")[0];

    if (finalMonth == month)
    {
     mydata dt = new mydata();
     dt.name = dr[0].ToString();
     //keep continuing for each column/each variable in the class we created

    filteredData.Add(dt);
  }}}

您的表中已经有数据,只想显示当前月份的数据,对吗?是的。但是我想要更多,为了进一步展示月度销售和年度销售,可以采用另一种形式或扩展此形式签出我的答案:)日期只有一列,日期时间在这两种情况下使用该名称:)如果答案解决了您的问题,请确保将其标记为答案:)给我一个示例,说明您的日期时间在数据库中的外观我从datetimepicker获取日期,并保存在date\u Sale表的date\u time列中。因此它保存为varchar或date格式,并检索为字符串,因此为什么我们使用int和month and year格式?值应以整数形式给出…以及您的屏幕截图不显示整个日期…..如果您的日期时间看起来像
1:2:2018 9:00
,则给定的查询将起作用,这就是为什么我要求从您的数据库中获取一个日期示例,以便我可以修改代码/查询
  List<mydata> filteredData = new List<mydata>();
  ///As OP commented,the date/time look like :  Saturday, April 14, 2018
  string m0nth = "August" 
  //Or      
  string month = DateTime.Now.Month.ToString()
  cmd = new SqlCommand("Select * from Daily_Sale ", con);
  SqlDataReader dr = cmd.ExecuteReader()
  While (dr.Reader())
   {
    string mnth = dr[2].ToString().Split(', ',', ')[0];  ///change 2 with the column count of the date column
    string finalMonth = mnth.Split(" ")[0];

    if (finalMonth == month)
    {
     mydata dt = new mydata();
     dt.name = dr[0].ToString();
     //keep continuing for each column/each variable in the class we created

    filteredData.Add(dt);
  }}}
   foreach(mydata dt in filteredData)
    {
    DataGridViewRow row = (DataGridViewRow)yourDataGridView.Rows[0].Clone();
    row.Cells[0].Value = dt.name;
    ///Keep continuing for each column
    yourDataGridView.Rows.Add(row);
     }