8 Star 6 Fork 3

葡萄城 / dataprocess

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
DynamicRows.aspx.cs 20.12 KB
一键复制 编辑 原始数据 按行查看 历史
葡萄城控件 提交于 2014-12-22 13:54 . InitCode
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using FarPoint.Web.Spread;
using FarPoint.Web.Spread.Model;
using FarPoint.CalcEngine;
using System.Data.OleDb;
namespace ControlExplorer
{
public partial class DynamicRows : System.Web.UI.Page
{
#region 页面事件
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
// 模板编号
string templateid = null;
templateid = Request.QueryString["tid"];
hfTemplateID.Value = templateid;
// 历史编号
string historyid = null;
historyid = Request.QueryString["hid"];
hfHistoryID.Value = historyid;
// 填报时间
txtDate.Text = DateTime.Today.ToShortDateString();
InitializeSheetView();
// 填充历史数据
if (!string.IsNullOrWhiteSpace(historyid))
{
InitializeHistoryDetail(historyid);
}
}
}
#endregion
#region 菜单操作
// 新建数据
protected void btnNew_Click(object sender, EventArgs e)
{
hfHistoryID.Value = null;
UpdateMenuState("New");
InitializeSheetView();
}
// 修改数据
protected void btnEdit_Click(object sender, EventArgs e)
{
UpdateMenuState("Edit");
fpTemplate.Sheets[0].OperationMode = OperationMode.Normal;
}
// 添加新行
protected void btnAddRow_Click(object sender, EventArgs e)
{
InserNewRow();
}
// 保存报表
protected void btnSave_Click(object sender, EventArgs e)
{
#region 将用户录入的数据保存到数据库中
string oldhistoryid = null;
string historyid = "";
try
{
fpTemplate.SaveChanges();
oldhistoryid = hfHistoryID.Value;
historyid = SaveHistory(hfTemplateID.Value);
SaveData(historyid, hfTemplateID.Value);
UpdateMenuState("View");
hfHistoryID.Value = historyid;
fpTemplate.Sheets[0].OperationMode = OperationMode.SingleSelect;
}
catch (ArgumentException ex)
{
// 回滚填报记录
DeleteHistory(hfTemplateID.Value, historyid);
hfHistoryID.Value = oldhistoryid;
ScriptManager.RegisterClientScriptBlock(this.UpdatePanel1, this.GetType(), "DataError", "ShowMessage('" + ex.Message + "');", true);
return;
}
ScriptManager.RegisterClientScriptBlock(this.UpdatePanel1, this.GetType(), "Success", "ShowMessage('保存成功!');", true);
#endregion
}
// 获取历史填报数据
protected void btnHistory_Click(object sender, EventArgs e)
{
UpdateMenuState("History");
InitializeHistoryList();
#region 获取数据
string commandstring = string.Format("SELECT TOP 30 * FROM 填报记录 WHERE 模板编号 = '{0}' ORDER BY 填报时间 DESC ", hfTemplateID.Value);
string connectionstring = System.Configuration.ConfigurationManager.ConnectionStrings["AccessConnectionString"].ConnectionString;
using (System.Data.OleDb.OleDbConnection connection = new System.Data.OleDb.OleDbConnection(connectionstring))
{
System.Data.OleDb.OleDbDataAdapter adapter = new System.Data.OleDb.OleDbDataAdapter(commandstring, connection);
System.Data.OleDb.OleDbCommandBuilder builder = new System.Data.OleDb.OleDbCommandBuilder(adapter);
DataTable dt = new DataTable();
adapter.Fill(dt);
fpTemplate.Sheets[0].DataSource = dt;
int columncount = fpTemplate.Sheets[0].ColumnCount - 1;
for (int i = 0; i < fpTemplate.Sheets[0].RowCount; i++)
{
FarPoint.Web.Spread.ButtonCellType btn = new FarPoint.Web.Spread.ButtonCellType("HistoryDetail");
FarPoint.Web.Spread.StyleInfo style = new FarPoint.Web.Spread.StyleInfo();
btn.ButtonType = FarPoint.Web.Spread.ButtonType.LinkButton;
btn.Text = "查看";
btn.CommandName = "HistoryDetail";
style.CellType = btn;
fpTemplate.Sheets[0].Cells[i, columncount].CellType = btn;
}
}
#endregion
}
#endregion
#region 私有方法
// 插入新行
private void InserNewRow()
{
int rowcount = 1;
int toprow = -1;
DefaultSheetDataModel dtModel = (fpTemplate.Sheets[0].DataModel as DefaultSheetDataModel);
ExternalRangeExpression expr = dtModel.GetCustomName("DataArea") as ExternalRangeExpression;
if (expr != null)
{
toprow = expr.Row;
}
// 计算新行的插入位置
int tmp = int.Parse(fpTemplate.Sheets[0].Cells[toprow, 0].Text);
int row = tmp;
while (int.TryParse(fpTemplate.Sheets[0].Cells[row + toprow - 1, 0].Text, out tmp))
{
row += 1;
}
row = row + toprow - 1;
// 添加新行
fpTemplate.Sheets[0].Rows.Add(row, rowcount);
// 新行行号
fpTemplate.Sheets[0].Cells[row, 0].Value = row - toprow + 1;
for (int col = 0; col < fpTemplate.Sheets[0].ColumnCount; col++)
{
// 复制单元格样式,比如:边线、数据格式、演示等
StyleInfo si = new StyleInfo();
fpTemplate.Sheets[0].StyleModel.GetCompositeInfo(toprow, col, -1, si);
fpTemplate.Sheets[0].StyleModel.SetDirectInfo(row, col, si);
}
}
// 初始化模板
private void InitializeSheetView()
{
SheetSkin skin = fpTemplate.Sheets[0].ActiveSkin;
fpTemplate.Reset();
fpTemplate.EditModePermanent = true;
fpTemplate.Sheets.Clear();
fpTemplate.Sheets.Add(new SheetView());
fpTemplate.UseClipboard = false;
fpTemplate.ClientAutoCalculation = true;
fpTemplate.Open(DataTools.GetTemplateStream(hfTemplateID.Value));
fpTemplate.Sheets[0].AllowPage = false;
fpTemplate.Sheets[0].AutoCalculation = true;
fpTemplate.Sheets[0].Protect = true;
//// 初始化组合框单元格类型
//InitializeComboBoxCellType();
fpTemplate.Sheets[0].ActiveSkin = skin;
fpTemplate.Sheets[0].LockBackColor = System.Drawing.Color.LightGray;
lTitle.Text = DataTools.GetTemplate(hfTemplateID.Value)["模板名称"].ToString();
}
// 初始化填报历史
private void InitializeHistoryList()
{
Panel1.Visible = false;
btnSave.Visible = false;
SheetSkin skin = fpTemplate.Sheets[0].ActiveSkin;
fpTemplate.Open(Server.MapPath("~\\Templates\\填报记录.xml"));
fpTemplate.UseClipboard = false;
fpTemplate.ClientAutoCalculation = true;
fpTemplate.Sheets[0].AllowPage = true;
fpTemplate.Sheets[0].PageSize = 20;
fpTemplate.Sheets[0].AutoCalculation = true;
fpTemplate.Sheets[0].Protect = true;
fpTemplate.Sheets[0].ActiveSkin = skin;
fpTemplate.Sheets[0].AutoGenerateColumns = false;
fpTemplate.Sheets[0].DataAutoCellTypes = false;
fpTemplate.Sheets[0].Columns[0].DataField = "记录编号";
fpTemplate.Sheets[0].Columns[1].DataField = "模板编号";
fpTemplate.Sheets[0].Columns[2].DataField = "模板名称";
fpTemplate.Sheets[0].Columns[3].DataField = "部门";
fpTemplate.Sheets[0].Columns[4].DataField = "填报人";
fpTemplate.Sheets[0].Columns[5].DataField = "填报时间";
fpTemplate.Sheets[0].Columns[6].DataField = "修改时间";
// 添加过滤功能
fpTemplate.Sheets[0].AutoFilterMode = FarPoint.Web.Spread.AutoFilterMode.Enhanced;
FarPoint.Web.Spread.IRowFilter rowFilter = new FarPoint.Web.Spread.HideRowFilter(fpTemplate.Sheets[0]);
FarPoint.Web.Spread.FilterColumnDefinition fd3 = new FarPoint.Web.Spread.FilterColumnDefinition(3, FarPoint.Web.Spread.FilterListBehavior.Default);
FarPoint.Web.Spread.FilterColumnDefinition fd4 = new FarPoint.Web.Spread.FilterColumnDefinition(4, FarPoint.Web.Spread.FilterListBehavior.Default);
FarPoint.Web.Spread.FilterColumnDefinition fd5 = new FarPoint.Web.Spread.FilterColumnDefinition(5, FarPoint.Web.Spread.FilterListBehavior.Default);
FarPoint.Web.Spread.FilterColumnDefinition fd6 = new FarPoint.Web.Spread.FilterColumnDefinition(6, FarPoint.Web.Spread.FilterListBehavior.Default);
rowFilter.ColumnDefinitions.Add(fd3);
rowFilter.ColumnDefinitions.Add(fd4);
rowFilter.ColumnDefinitions.Add(fd5);
rowFilter.ColumnDefinitions.Add(fd6);
fpTemplate.Sheets[0].RowFilter = rowFilter;
fpTemplate.ButtonCommand += new SpreadCommandEventHandler(fpTemplate_ButtonCommand);
}
// 加载填报历史数据
private void InitializeHistoryDetail(string historyid)
{
UpdateMenuState("View");
fpTemplate.Sheets[0].AllowPage = false;
fpTemplate.Sheets[0].OperationMode = OperationMode.SingleSelect;
string tablename = DataTools.GetTemplateDataSource(hfTemplateID.Value);
int toprow = -1;
DefaultSheetDataModel dtModel = (fpTemplate.Sheets[0].DataModel as DefaultSheetDataModel);
ExternalRangeExpression expr = dtModel.GetCustomName("DataArea") as ExternalRangeExpression;
if (expr != null)
{
toprow = expr.Row;
}
List<string> columns = DataTools.GetTemplateDataFields(hfTemplateID.Value);
Dictionary<string, int> datafields = new Dictionary<string, int>();
// 找到全部数据字段对应单元格的所在列索引
for (int c = 0; c < columns.Count; c++)
{
ExternalCellExpression df = fpTemplate.Sheets[0].GetCustomName(columns[c]) as ExternalCellExpression;
if (df != null)
{
datafields.Add(columns[c], df.Column);
}
}
#region 数据操作
string commandstring = string.Format("SELECT * FROM [{0}] WHERE 记录编号 = '{1}'", tablename, historyid);
string connectionstring = System.Configuration.ConfigurationManager.ConnectionStrings["AccessConnectionString"].ConnectionString;
using (System.Data.OleDb.OleDbConnection connection = new System.Data.OleDb.OleDbConnection(connectionstring))
{
System.Data.OleDb.OleDbDataAdapter adapter = new System.Data.OleDb.OleDbDataAdapter(commandstring, connection);
System.Data.OleDb.OleDbCommandBuilder builder = new System.Data.OleDb.OleDbCommandBuilder(adapter);
DataTable dt = new DataTable();
adapter.Fill(dt);
object value = null;
int endrow = dt.Rows.Count + toprow;
// 插入新数据
for (int r = toprow; r < endrow; r++)
{
DataRow dr = dt.Rows[r - toprow];
fpTemplate.Sheets[0].Rows[r].Tag = dr["ID"];
foreach (string col in datafields.Keys.ToList<string>())
{
fpTemplate.Sheets[0].SetValue(r, datafields[col], dr[col]);
}
if (toprow < endrow - 1)
{
InserNewRow();
}
}
}
#endregion
}
// 删除模板填报历史记录
private void DeleteHistory(string templateid, string historyid)
{
#region 数据操作
string tablename = DataTools.GetTemplateDataSource(templateid);
string commandstring = "DELETE FROM 填报记录 WHERE 记录编号 = '" + historyid + "'";
string connectionstring = System.Configuration.ConfigurationManager.ConnectionStrings["AccessConnectionString"].ConnectionString;
using (OleDbConnection connection = new OleDbConnection(connectionstring))
{
OleDbCommand cmd = new OleDbCommand(commandstring, connection);
connection.Open();
cmd.ExecuteNonQuery();
commandstring = string.Format("DELETE FROM {0} WHERE 记录编号 = '{1}' ", tablename, historyid);
cmd = new OleDbCommand(commandstring, connection);
cmd.ExecuteNonQuery();
connection.Close();
}
#endregion
}
// 保存模板填报历史记录
private string SaveHistory(string templateid)
{
string hisoryid = (string.IsNullOrWhiteSpace(hfHistoryID.Value) ? Guid.NewGuid().ToString() : hfHistoryID.Value);
#region 数据操作
string commandstring = "SELECT TOP 50 * FROM 填报记录 WHERE 记录编号 = '" + hisoryid + "'";
string connectionstring = System.Configuration.ConfigurationManager.ConnectionStrings["AccessConnectionString"].ConnectionString;
using (System.Data.OleDb.OleDbConnection connection = new System.Data.OleDb.OleDbConnection(connectionstring))
{
System.Data.OleDb.OleDbDataAdapter adapter = new System.Data.OleDb.OleDbDataAdapter(commandstring, connection);
System.Data.OleDb.OleDbCommandBuilder builder = new System.Data.OleDb.OleDbCommandBuilder(adapter);
DataTable dt = new DataTable();
adapter.Fill(dt);
DataRow dr = (string.IsNullOrWhiteSpace(hfHistoryID.Value) ? dt.NewRow() : dt.Rows[0]);
if (string.IsNullOrWhiteSpace(hfHistoryID.Value))
{
// 新建数据
dr["记录编号"] = hisoryid;
dr["模板编号"] = templateid;
dr["部门"] = lstCategoryID.SelectedItem.Text;
dr["填报人"] = txtName.Text;
dr["填报时间"] = DateTime.Now;
dr["修改时间"] = DateTime.Now;
dt.Rows.Add(dr);
}
else
{
// 历史数据
dr["修改时间"] = DateTime.Now;
}
adapter.Update(dt);
}
#endregion
return hisoryid;
}
// 保存数据
private void SaveData(string historyid, string templateid)
{
// 计算新行的插入位置
int toprow = -1;
int tmp = 1;
int row = tmp;
DefaultSheetDataModel dtModel = (fpTemplate.Sheets[0].DataModel as DefaultSheetDataModel);
ExternalRangeExpression expr = dtModel.GetCustomName("DataArea") as ExternalRangeExpression;
if (expr != null)
{
toprow = expr.Row;
}
while (int.TryParse(fpTemplate.Sheets[0].Cells[row + toprow - 1, 0].Text, out tmp))
{
row += 1;
}
row = row + toprow - 1;
#region 将用户录入的数据保存到数据库中
List<string> columns = DataTools.GetTemplateDataFields(hfTemplateID.Value);
Dictionary<string, int> datafields = new Dictionary<string, int>();
// 找到全部数据字段对应单元格的所在列索引
for (int c = 0; c < columns.Count; c++)
{
ExternalCellExpression df = fpTemplate.Sheets[0].GetCustomName(columns[c]) as ExternalCellExpression;
if (df != null)
{
datafields.Add(columns[c], df.Column);
}
}
string tablename = DataTools.GetTemplateDataSource(templateid);
string commandstring = "SELECT * FROM " + tablename;
string connectionstring = System.Configuration.ConfigurationManager.ConnectionStrings["AccessConnectionString"].ConnectionString;
using (System.Data.OleDb.OleDbConnection connection = new System.Data.OleDb.OleDbConnection(connectionstring))
{
System.Data.OleDb.OleDbDataAdapter adapter = new System.Data.OleDb.OleDbDataAdapter(commandstring, connection);
System.Data.OleDb.OleDbCommandBuilder builder = new System.Data.OleDb.OleDbCommandBuilder(adapter);
DataTable dt = new DataTable();
adapter.Fill(dt);
object value = null;
// 插入新数据
for (int r = toprow; r < row; r++)
{
if (fpTemplate.Sheets[0].Cells[r, 1].Value == null)
break;
DataRow dr = (string.IsNullOrWhiteSpace(hfHistoryID.Value) ? dt.NewRow() : dt.Rows[0]);
foreach (string col in datafields.Keys.ToList<string>())
{
value = fpTemplate.Sheets[0].GetValue(r, datafields[col]);
if (value != null)
{
dr[col] = value;
}
}
// 新建数据
if (string.IsNullOrWhiteSpace(hfHistoryID.Value))
{
dr["记录编号"] = historyid;
dt.Rows.Add(dr);
}
}
adapter.Update(dt);
}
#endregion
}
// 更新菜单状态
private void UpdateMenuState(string action)
{
switch (action)
{
case "New":
Panel1.Visible = true;
btnNew.Visible = true;
btnEdit.Visible = false;
btnSave.Visible = true;
btnHistory.Visible = true;
break;
case "Edit":
Panel1.Visible = false;
btnNew.Visible = true;
btnEdit.Visible = false;
btnSave.Visible = true;
btnHistory.Visible = true;
break;
case "View":
Panel1.Visible = false;
btnNew.Visible = true;
btnEdit.Visible = false;
btnSave.Visible = false;
btnHistory.Visible = true;
break;
case "History":
Panel1.Visible = false;
btnNew.Visible = true;
btnEdit.Visible = false;
btnSave.Visible = false;
btnHistory.Visible = false;
break;
default:
break;
}
}
#endregion
#region Spread 操作
protected void fpTemplate_ButtonCommand(object sender, SpreadCommandEventArgs e)
{
fpTemplate.SaveChanges();
if (e.CommandName == "HistoryDetail")
{
string historyid = fpTemplate.Sheets[0].Cells[fpTemplate.Sheets[0].ActiveRow, 0].Text;
hfHistoryID.Value = historyid;
InitializeSheetView();
if (!string.IsNullOrWhiteSpace(historyid))
{
InitializeHistoryDetail(historyid);
}
}
}
#endregion
}
}
C#
1
https://gitee.com/GrapeCity/dataprocess.git
git@gitee.com:GrapeCity/dataprocess.git
GrapeCity
dataprocess
dataprocess
master

搜索帮助