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);
}