昨天的帖子
http://community.csdn.net/Expert/topic/5700/5700979.xml?temp=.5231134初步从ok.xsl
部門名稱 員工編號 员工姓名 請假日期 假别名称 請假時數 時數單位
(K1) Q-0004 姚力 20070601 年休假 1 天
(K1) Q-0004 姚力 20070608 陪產假 1 天
(K1) Q-0004 姚力 20070612 年休假 2 天
(K1) Q-0005 顧忠 20070601 年休假 0.5 天
(K2) Q-0031 趙丽 20070601 半薪病假 8 小時
.........................................
要实现
部門名稱 員工編號 员工姓名 年休假 陪產假 半薪病假
(K1) Q-0004 姚力 20070601 24小时 8小时
(K1) Q-0005 顧建忠 20070601 4小时
(K2) Q-0031 趙丽 20070601 8 小時
.................................
时间单位为天的话,就要乘8,转化为小时。
以工号为唯一性,合并多条数据为一条。..........
Help me !
http://community.csdn.net/Expert/topic/5700/5700979.xml?temp=.5231134初步从ok.xsl
部門名稱 員工編號 员工姓名 請假日期 假别名称 請假時數 時數單位
(K1) Q-0004 姚力 20070601 年休假 1 天
(K1) Q-0004 姚力 20070608 陪產假 1 天
(K1) Q-0004 姚力 20070612 年休假 2 天
(K1) Q-0005 顧忠 20070601 年休假 0.5 天
(K2) Q-0031 趙丽 20070601 半薪病假 8 小時
.........................................
要实现
部門名稱 員工編號 员工姓名 年休假 陪產假 半薪病假
(K1) Q-0004 姚力 20070601 24小时 8小时
(K1) Q-0005 顧建忠 20070601 4小时
(K2) Q-0031 趙丽 20070601 8 小時
.................................
时间单位为天的话,就要乘8,转化为小时。
以工号为唯一性,合并多条数据为一条。..........
Help me !
解决方案 »
- 在用户控件中如何引用JS文件中的函数
- 正则替换问题,测试通过就给分.........
- 如何修改另一个文件中的文本
- datalist的ItemDataBound简单问题
- 使用asp.net中的html控件<input type="file">选择一个文件后,点击send按钮操作后,该控件中的文件地址就被清空,要怎么保留地址啊
- 邮件发不出,是不是因为objMessage.Fields.Add?谢谢了!
- 请问ASP。NET中怎么实现<%# DataBinder.Eval(Container.DataItem, "netname")==<%=myname%>?"自己购买":"赠送"%>
- VS2008(2005)中 Asp.net C# 怎么添加页面事件??
- 请问在ASP.NET(WEB应用程序)里如何实现Windows应用程序中的InputBox()功能?
- 关于ubb代码的一个问题。
- 支持SqlServer2000/2005、Oracle、MsAccess的通用数据库访问组件发布,免费提供使用,欢迎提出宝贵意见!
- |M| 学了几天的存储过程最后发现竟然没有什么用 晕
如何实现?
或者,用dt.Compute("sum(日期)","编号='某个员工编号')
初步从ok.xsl,读到Girdview中。
部門名稱 員工編號 员工姓名 請假日期 假别名称 請假時數 時數單位
(K1) Q-0004 姚力 20070601 年休假 1 天
(K1) Q-0004 姚力 20070608 陪產假 1 天
(K1) Q-0004 姚力 20070612 年休假 2 天
(K1) Q-0005 顧忠 20070601 年休假 0.5 天
(K2) Q-0031 趙丽 20070601 半薪病假 8 小時
一种是先导入数据库。 怎么实现Girdview导入数据库?
===>
怎么是到gridview控件中,gv是ui控件,应该先读到数据容器中才对.
读到dataset的datatable中.
在gridview中我只能它显示需要的列。
我在girdview中只然它显示
部門名稱 員工編號 员工姓名 請假日期 假别名称 請假時數 時數單位
这几列。能不能用实现实现Girdview导入数据库?
在dataset中的datatable里的数据我不会处理,也就是说不会编写代码。
==>
用datatable导入,自己写sql,想导哪个字段就写哪个.
update T2 set 请假时数=请假时数*8
where 时数单位='天'
update T2 set 时数单位='小时'select 部门名称,员工编号,员工姓名,假别名称,sum(请假时数) AS 总请假时间 from T2
group by 部门名称,员工编号,员工姓名,假别名称
得到:
部门名称,员工编号,员工姓名,假别名称,总请假时间
K1 Q-0004 姚力 年休假 24.0
K1 Q-0004 姚力 陪产假 8.0
K1 Q-0005 顾忠 年休假 4.0
K2 Q-0031 赵丽 半新病假 8.0
然后在程序中根据“假别名称”判断这个结果集
http://www.cnblogs.com/Jinglecat/archive/2006/08/15/477472.html
特别注意:纯数据处理,不要去考虑什么 DataGrid/GridView/... 控件的,那是 UI 组件!!!!
set @s ='select 部門名稱,員工編號,员工姓名'
select @s = @s+','+假别名称+'=sum(case 假别名称 when '''+假别名称+''' then 請假時數*(case 時數單位 when ''天'' then 8 else 1 end) else 0 end)'
from tb group by 假别名称
exec(@s+'from tb group by 部門名稱,員工編號,员工姓名')
create table tb
(
部門名稱 varchar(100),
員工編號 varchar(100),
员工姓名 varchar(100),
請假日期 varchar(100),
假别名称 varchar(100),
請假時數 float,
時數單位 varchar(100)
)
insert into tb
select
'(K1)', 'Q-0004', '姚力 ', '20070601','年休假','1','天' union all select
'(K1)', 'Q-0004', '姚力 ', '20070608','陪產假','1','天' union all select
'(K1)', 'Q-0004', '姚力 ', '20070612','年休假','2','天' union all select
'(K1)', 'Q-0005', '顧忠 ', '20070601','年休假',0.5,'天' union all select
'(K2)', 'Q-0031', '趙丽 ', '20070601','半薪病假',8,'小时'
declare @s varchar(8000)
set @s ='select 部門名稱,員工編號,员工姓名'
select @s = @s+','+假别名称+'=sum(case 假别名称 when '''+假别名称+''' then 請假時數*(case 時數單位 when ''天'' then 8 else 1 end) else 0 end)'
from tb group by 假别名称
exec(@s+'from tb group by 部門名稱,員工編號,员工姓名')
----------------------------------------
(K1) Q-0004 姚力 0.0 24.0 8.0
(K1) Q-0005 顧忠 0.0 4.0 0.0
(K2) Q-0031 趙丽 8.0 0.0 0.0
在DATATABLe里编辑。
haonanernet(与时俱进)谢谢你的答复。
只要我把excel导入数据库,一定试一下你的方法。
for (int i = 0; i < GridView1.Rows.Count; i++)
{
// string SqlStr = "update test01 set card='" + card + "',xueli='" + xueli + "',price='" + price + "',name='" + username + "' where id=" + id;
string SqlStr = "Insert excel_imput(dep_name,empId,emp_name,holiday_name,holiday_times,time_unit) values('" + GridView1.Rows[i].Cells[0].Text + "','" + GridView1.Rows[i].Cells[1].Text + "','" + GridView1.Rows[i].Cells[2].Text + "','" + GridView1.Rows[i].Cells[4].Text + "','" + GridView1.Rows[i].Cells[5].Text + "','" + GridView1.Rows[i].Cells[6].Text + "')";
try
{
SqlConnection conn = new SqlConnection(connStr);
if (conn.State.ToString() == "Closed") conn.Open();
SqlCommand comm = new SqlCommand(SqlStr, conn);
comm.ExecuteNonQuery();
comm.Dispose();
if (conn.State.ToString() == "Open") conn.Close(); }
catch (Exception ex)
{
Response.Write("数据库错误,错误原因:" + ex.Message);
Response.End();
}
}从girdview成功导入数据库。现在可以开始试一下haonanernet(与时俱进)的做法。
要是我会在datatable里面操作的话,俺也不会发这个贴了。
好在还能从girdview成功导入数据库。
虽然笨了点,没办法,只能多走弯路,笨路。
string connStr =
String.Format("provider=Microsoft.Jet.OLEDB.4.0;data source={0};Extended Properties=Excel 8.0",
Server.MapPath("XlsCross.xls"));
// 加载原表
OleDbDataAdapter da = new OleDbDataAdapter(sqlSelect, connStr);
DataTable sourceTable = new DataTable();
da.Fill(sourceTable); // 输出原表
GridView1.DataSource = sourceTable;
GridView1.DataBind(); // 创建目标表结构
DataTable targetTbl = new DataTable();
targetTbl.Columns.Add("部門名稱", typeof(string));
targetTbl.Columns.Add("員工編號", typeof(string));
targetTbl.Columns.Add("员工姓名", typeof(string)); // 获取员工信息
DataTable stuffTable = sourceTable.DefaultView.ToTable(true, new string[] { "部門名稱", "員工編號", "员工姓名" });
// 从源表导入员工信息
foreach (DataRow stuffRow in stuffTable.Rows) {
DataRow targetRow = targetTbl.NewRow();
targetRow["部門名稱"] = stuffRow["部門名稱"];
targetRow["員工編號"] = stuffRow["員工編號"];
targetRow["员工姓名"] = stuffRow["员工姓名"]; targetTbl.Rows.Add(targetRow);
} // 两表加入 DataSet 并根据员工编号建立父子关系,目标表为父表
DataSet ds = new DataSet();
ds.Tables.Add(targetTbl);
ds.Tables.Add(sourceTable);
ds.Relations.Add(targetTbl.Columns["員工編號"], sourceTable.Columns["員工編號"]); // 从源表(子表)计算目标数据
DataTable vocationCategoryTable = sourceTable.DefaultView.ToTable(true, "假别名称");
foreach (DataRow row in vocationCategoryTable.Rows) {
targetTbl.Columns.Add(row["假别名称"].ToString(), typeof(double), String.Format("SUM(Child.{0})", "假别名称"));
} // 输出
GridView2.DataSource = targetTbl;
GridView2.DataBind();
非常感激!
Jinglecat(晓风残月 >> 问题需简洁,错误要详细) ( ) 信誉:94 2007-08-10 14:19:27 得分: 0
I'm sorry that there are some big bug at My code snippets above.I'm struggling to fix it.
大哥,你见外了,我特感激您!
当我刚发帖,您就说要帮我,在你百忙中时还伸出温暖有力的手来帮我。
实在太感谢你了!
接下来我将试一下你方法,还会拜访你的blog。
你让我今天学了很多。
谢谢!
{
string sqlSelect = "SELECT 部門名稱, 員工編號, 员工姓名, 請假日期, 假别名称, 請假時數, 時數單位 FROM [Sheet1$]";
string connStr =
String.Format("provider=Microsoft.Jet.OLEDB.4.0;data source={0};Extended Properties=Excel 8.0",
Server.MapPath("XlsCross.xls"));
// 加载原表
OleDbDataAdapter da = new OleDbDataAdapter(sqlSelect, connStr);
DataTable sourceTable = new DataTable();
da.Fill(sourceTable); // 输出原表
GridView1.DataSource = sourceTable;
GridView1.DataBind(); // 创建目标表结构
DataTable targetTbl = new DataTable();
targetTbl.Columns.Add("部門名稱", typeof(string));
targetTbl.Columns.Add("員工編號", typeof(string));
targetTbl.Columns.Add("员工姓名", typeof(string)); //
DataTable vocationCategoryTable = sourceTable.DefaultView.ToTable(true, "假别名称");
foreach (DataRow row in vocationCategoryTable.Rows) {
targetTbl.Columns.Add(row["假别名称"].ToString(), typeof(double));
} // 获取员工信息
DataTable stuffTable = sourceTable.DefaultView.ToTable(true, new string[] { "部門名稱", "員工編號", "员工姓名" }); // 从源表导入员工信息
foreach (DataRow stuffRow in stuffTable.Rows) {
DataRow targetRow = targetTbl.NewRow();
targetRow["部門名稱"] = stuffRow["部門名稱"].ToString().Trim();
targetRow["員工編號"] = stuffRow["員工編號"].ToString().Trim();
targetRow["员工姓名"] = stuffRow["员工姓名"].ToString().Trim(); int ndx = 3;
while (++ndx < targetTbl.Columns.Count) {
ExecuteSUM(sourceTable, targetTbl, targetRow, ndx);
}
targetTbl.Rows.Add(targetRow);
} // 输出
GridView2.DataSource = targetTbl;
GridView2.DataBind();
} private void ExecuteSUM(DataTable sourceTable, DataTable targetTable, DataRow targetRow, int targetColumnIndex)
{
DataRow[] sourceRows = sourceTable.Select(String.Format("員工編號='{0}' AND 假别名称='{1}'",
targetRow["員工編號"].ToString().Trim(), targetTable.Columns[targetColumnIndex].ColumnName.Trim()));
double sum = 0.0;
foreach (DataRow sourceRow in sourceRows) {
sum += (Convert.ToDouble(sourceRow["請假時數"]) * (sourceRow["時數單位"].ToString().Trim() == "天" ? 8 : 1));
} targetRow[targetTable.Columns[targetColumnIndex].ColumnName] = sum;
}
targetRow["员工姓名"] = stuffRow["员工姓名"].ToString().Trim();int ndx = 3; >>>targetRow["员工姓名"] = stuffRow["员工姓名"].ToString().Trim();int ndx = 2;
现在结果是 OK 了,想来还是 SQL 做集合运算强!
http://www.cnblogs.com/Jinglecat/archive/2007/07/16/820339.html
declare @s varchar(8000)
set @s ='select dep_name,empId,emp_name'
select @s = @s+','+holiday_name+'=sum(case holiday_name when '''+holiday_name+''' then holiday_times*(case time_unit when ''天'' then 8 else 1 end) else 0 end)'
from excel_imput group by holiday_name
exec(@s+'from excel_imput group by dep_name,empId,emp_name')
数据库中能运行出结果。
现在我想把它放在页面中来实行。
string SqlStr = "select dep_name,empId,emp_name,'+holiday_name+'=sum(case holiday_name when '''+holiday_name+''' then holiday_times*(case time_unit when '天' then 8 else 1 end) else 0 end) from excel_imput group by dep_name,empId,emp_name ";结果却出现如下:
dep_name empId emp_name +holiday_name+
(K1) Q-0004 姚力 0
(K1) Q-0005 顧忠 0
你用页面来调用存储过程就可以了.他返回的依然是一个DataTable
as
begin
declare @s varchar(8000)
set @s ='select dep_name,empId,emp_name'
select @s = @s+','+holiday_name+'=sum(case holiday_name when '''+holiday_name+''' then holiday_times*(case time_unit when ''天'' then 8 else 1 end) else 0 end)'
from excel_imput group by holiday_name
exec(@s+'from excel_imput group by dep_name,empId,emp_name')
end
接着我在页面里面调用,运行通过。
把代码贴出来,让更多初学者或象我这样的菜鸟学习。
SqlConnection conndb = new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["connectionString"]);
SqlCommand SqlCom = new SqlCommand("Excel_ImputProcedure", conndb);
SqlCom.CommandType = CommandType.StoredProcedure;
conndb.Open();
SqlDataReader result = SqlCom.ExecuteReader(CommandBehavior.CloseConnection);
GridView2.DataSource = result;
GridView2.DataBind();
在这里感谢各大网友的支持!
特别感谢haonanernet(与时俱进),Jinglecat(晓风残月 >> 问题需简洁,错误要详细)
及cpp2017(慕白兄)的热心帮助和指导!
特感激你们!