通过很长的一条sql语句将三个表中left join 得到一个结果,填充到dataTalbe然后绑定给datagridview,datagridview看到的数据如下->
日期 点击量 对话量 有效对话量 预约量 预计到诊量 实际到诊量
.
..
...
2012-01-17 2000 700 40 30 300 8
2012-01-18 1000 200 50 40 280 10
...
..
.
我现在要对这个dataTable进行一定的处理,最终想得到下面这个样子-> 时间段 点击量 对话量 有效对话量 预约量 预计到诊量 实际到诊量
今天 1000 200 50 40 280 10
昨天 2000 700 40 30 300 8
近一周 6000 2000 1000 100 600 50
当月 24000 8000 4000 412 20000 303
上月 25000 9000 4500 500 21000 400
当年 300000 108000 54000 6000 220000 4800
应该如何对dataTalbe进行处理呢?希望高手指点或给个思路附项目中填充dataTable的代码->private DataView GetOrderComeAnalysis()
{
List<OrderComeAnalysisModel> ocamList = ocabll.GetOrderComeAnalysisInfo(); //建立DataTalbe
DataTable dtEmployeePerformanceCount = new DataTable("Table_OrderComeAnalysis");
dtEmployeePerformanceCount.Columns.Add("医院", System.Type.GetType("System.String"));
dtEmployeePerformanceCount.Columns.Add("日期", System.Type.GetType("System.DateTime"));
dtEmployeePerformanceCount.Columns.Add("点击量", System.Type.GetType("System.Int32"));
dtEmployeePerformanceCount.Columns.Add("对话量", System.Type.GetType("System.Int32"));
dtEmployeePerformanceCount.Columns.Add("有效对话量", System.Type.GetType("System.Int32"));
dtEmployeePerformanceCount.Columns.Add("预约量", System.Type.GetType("System.Int32"));
dtEmployeePerformanceCount.Columns.Add("预计到诊量", System.Type.GetType("System.Int32"));
dtEmployeePerformanceCount.Columns.Add("到诊量", System.Type.GetType("System.Int32"));
//添加数据
for (int i = 0; i < ocamList.Count; i++)
{
DataRow dr = dtEmployeePerformanceCount.NewRow(); if (ocamList[i].ProjectId != 0)
dr["医院"] = dd.dicProject[ocamList[i].ProjectId];
dr["日期"] = ocamList[i].Date;
dr["预约量"] = ocamList[i].OrderCount;
dr["到诊量"] = ocamList[i].ComeCount;
dr["预计到诊量"] = ocamList[i].ForecastComeCount;
dr["点击量"] = ocamList[i].ClickAmount;
dr["对话量"] = ocamList[i].LocalAllCount + ocamList[i].NoLocalAllCount;
dr["有效对话量"] = ocamList[i].LocalValidCount + ocamList[i].NoLocalValidCount;
dtEmployeePerformanceCount.Rows.Add(dr);
}
return new DataView(dtEmployeePerformanceCount);
}界面显示时以医院名称进行筛选-> dv.RowFilter = string.Format("医院='{0}'", cmb_hospitalName.Text);//过滤希望高手帮帮忙看看我这个功能应该怎么实现,谢谢了先!!!!
日期 点击量 对话量 有效对话量 预约量 预计到诊量 实际到诊量
.
..
...
2012-01-17 2000 700 40 30 300 8
2012-01-18 1000 200 50 40 280 10
...
..
.
我现在要对这个dataTable进行一定的处理,最终想得到下面这个样子-> 时间段 点击量 对话量 有效对话量 预约量 预计到诊量 实际到诊量
今天 1000 200 50 40 280 10
昨天 2000 700 40 30 300 8
近一周 6000 2000 1000 100 600 50
当月 24000 8000 4000 412 20000 303
上月 25000 9000 4500 500 21000 400
当年 300000 108000 54000 6000 220000 4800
应该如何对dataTalbe进行处理呢?希望高手指点或给个思路附项目中填充dataTable的代码->private DataView GetOrderComeAnalysis()
{
List<OrderComeAnalysisModel> ocamList = ocabll.GetOrderComeAnalysisInfo(); //建立DataTalbe
DataTable dtEmployeePerformanceCount = new DataTable("Table_OrderComeAnalysis");
dtEmployeePerformanceCount.Columns.Add("医院", System.Type.GetType("System.String"));
dtEmployeePerformanceCount.Columns.Add("日期", System.Type.GetType("System.DateTime"));
dtEmployeePerformanceCount.Columns.Add("点击量", System.Type.GetType("System.Int32"));
dtEmployeePerformanceCount.Columns.Add("对话量", System.Type.GetType("System.Int32"));
dtEmployeePerformanceCount.Columns.Add("有效对话量", System.Type.GetType("System.Int32"));
dtEmployeePerformanceCount.Columns.Add("预约量", System.Type.GetType("System.Int32"));
dtEmployeePerformanceCount.Columns.Add("预计到诊量", System.Type.GetType("System.Int32"));
dtEmployeePerformanceCount.Columns.Add("到诊量", System.Type.GetType("System.Int32"));
//添加数据
for (int i = 0; i < ocamList.Count; i++)
{
DataRow dr = dtEmployeePerformanceCount.NewRow(); if (ocamList[i].ProjectId != 0)
dr["医院"] = dd.dicProject[ocamList[i].ProjectId];
dr["日期"] = ocamList[i].Date;
dr["预约量"] = ocamList[i].OrderCount;
dr["到诊量"] = ocamList[i].ComeCount;
dr["预计到诊量"] = ocamList[i].ForecastComeCount;
dr["点击量"] = ocamList[i].ClickAmount;
dr["对话量"] = ocamList[i].LocalAllCount + ocamList[i].NoLocalAllCount;
dr["有效对话量"] = ocamList[i].LocalValidCount + ocamList[i].NoLocalValidCount;
dtEmployeePerformanceCount.Rows.Add(dr);
}
return new DataView(dtEmployeePerformanceCount);
}界面显示时以医院名称进行筛选-> dv.RowFilter = string.Format("医院='{0}'", cmb_hospitalName.Text);//过滤希望高手帮帮忙看看我这个功能应该怎么实现,谢谢了先!!!!
第二,得到datable后,自己逐条处理
日期在数据库去处理
datatable.select("点击量 ASC,对话量 ASC,"),
int 点击量 = 0;
int 对话量 = 0;
int 有效对话量 = 0;
int 预约量 = 0;
int 预计到诊量 = 0;
int 到诊量 = 0; for (int i = 0; i < dt.Rows.Count; i++)
{
if (Convert.ToDateTime(dt.Rows[i]["日期"]) == DateTime.Now.Date)
{
newDT.Rows[0]["医院"] = dt.Rows[i]["医院"];
newDT.Rows[0]["时间段"] = "今天";
newDT.Rows[0]["点击量"] = dt.Rows[i]["点击量"];
newDT.Rows[0]["对话量"] = dt.Rows[i]["对话量"];
newDT.Rows[0]["有效对话量"] = dt.Rows[i]["有效对话量"];
newDT.Rows[0]["预约量"] = dt.Rows[i]["预约量"];
newDT.Rows[0]["预计到诊量"] = dt.Rows[i]["预计到诊量"];
newDT.Rows[0]["到诊量"] = dt.Rows[i]["到诊量"];
} if (Convert.ToDateTime(dt.Rows[i]["日期"]) == DateTime.Now.Date.AddDays(-1))
{
newDT.Rows[1]["医院"] = dt.Rows[i]["医院"];
newDT.Rows[1]["时间段"] = "昨天";
newDT.Rows[1]["点击量"] = dt.Rows[i]["点击量"];
newDT.Rows[1]["对话量"] = dt.Rows[i]["对话量"];
newDT.Rows[1]["有效对话量"] = dt.Rows[i]["有效对话量"];
newDT.Rows[1]["预约量"] = dt.Rows[i]["预约量"];
newDT.Rows[1]["预计到诊量"] = dt.Rows[i]["预计到诊量"];
newDT.Rows[1]["到诊量"] = dt.Rows[i]["到诊量"];
} if (Convert.ToDateTime(dt.Rows[i]["日期"]) <= DateTime.Now.Date && Convert.ToDateTime(dt.Rows[i]["日期"]) > DateTime.Now.Date.AddDays(-7))
{
newDT.Rows[2]["医院"] = dt.Rows[i]["医院"];
newDT.Rows[2]["时间段"] = "近一周"; 点击量 += Convert.ToInt32(dt.Rows[i]["点击量"]);
对话量 += Convert.ToInt32(dt.Rows[i]["对话量"]);
有效对话量 += Convert.ToInt32(dt.Rows[i]["有效对话量"]);
预约量 += Convert.ToInt32(dt.Rows[i]["预约量"]);
预计到诊量 += Convert.ToInt32(dt.Rows[i]["预计到诊量"]);
到诊量 += Convert.ToInt32(dt.Rows[i]["到诊量"]); newDT.Rows[2]["点击量"] = 点击量;
newDT.Rows[2]["对话量"] = 对话量;
newDT.Rows[2]["有效对话量"] = 有效对话量;
newDT.Rows[2]["预约量"] = 预约量;
newDT.Rows[2]["预计到诊量"] = 预计到诊量;
newDT.Rows[2]["到诊量"] = 到诊量;
}
}
2。变量这么用,那当月,上月,当年咋办?
3。Convert.ToDateTime(dt.Rows[i]["日期"]) == DateTime.Now.Date 能相等么?
2.再加几个变量 就在近一周变量那块那块加绩个
3.我测试了 是相等的啊 ,日期字段已经在sql中进行处理了。什么时候会出现不相等的情况?
那问题不大 直接对变量积记,不需要每次都往datatable中写数据了 .