FineUI/FineUI.Examples/grid/grid_editor_cell_updatecellvalue_noedit.aspx.cs
三生石上 79ad9e6bc2 v4.2.3
2016-01-10 01:19:30 -05:00

236 lines
7.5 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Text;
using System.IO;
using Newtonsoft.Json.Linq;
namespace FineUI.Examples.grid
{
public partial class grid_editor_cell_updatecellvalue_noedit : PageBase
{
private bool AppendToEnd = false;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
// 删除选中单元格的客户端脚本
string deleteScript = GetDeleteScript();
// 新增数据初始值
JObject defaultObj = new JObject();
defaultObj.Add("Name", "新用户");
defaultObj.Add("Gender", "1");
defaultObj.Add("Major", "化学系");
defaultObj.Add("ChineseScore", 0);
defaultObj.Add("MathScore", 0);
defaultObj.Add("TotalScore", 0);
defaultObj.Add("Delete", String.Format("<a href=\"javascript:;\" onclick=\"{0}\"><img src=\"{1}\"/></a>", deleteScript, IconHelper.GetResolvedIconUrl(Icon.Delete)));
// 在第一行新增一条数据
btnNew.OnClientClick = Grid1.GetAddNewRecordReference(defaultObj, AppendToEnd);
// 重置表格
btnReset.OnClientClick = Confirm.GetShowReference("确定要重置表格数据?", String.Empty, Grid1.GetRejectChangesReference(), String.Empty);
// 删除选中行按钮
btnDelete.OnClientClick = Grid1.GetNoSelectionAlertReference("请至少选择一项!") + deleteScript;
// 绑定表格
BindGrid();
}
}
// 删除选中行的脚本
private string GetDeleteScript()
{
return Confirm.GetShowReference("删除选中行?", String.Empty, MessageBoxIcon.Question, Grid1.GetDeleteSelectedRowsReference(), String.Empty);
}
#region BindGrid
private void BindGrid()
{
DataTable table = GetSourceData();
Grid1.DataSource = table;
Grid1.DataBind();
}
#endregion
#region Events
protected void Grid1_PreDataBound(object sender, EventArgs e)
{
// 设置LinkButtonField的点击客户端事件
LinkButtonField deleteField = Grid1.FindColumn("Delete") as LinkButtonField;
deleteField.OnClientClick = GetDeleteScript();
}
private DataRow CreateNewData(DataTable table, Dictionary<string, object> newAddedData)
{
DataRow rowData = table.NewRow();
// 设置行ID模拟数据库的自增长列
rowData["Id"] = GetNextRowID();
UpdateDataRow(newAddedData, rowData);
return rowData;
}
protected void Button2_Click(object sender, EventArgs e)
{
// 修改的现有数据
Dictionary<int, Dictionary<string, object>> modifiedDict = Grid1.GetModifiedDict();
foreach (int rowIndex in modifiedDict.Keys)
{
int rowID = Convert.ToInt32(Grid1.DataKeys[rowIndex][0]);
DataRow row = FindRowByID(rowID);
UpdateDataRow(modifiedDict[rowIndex], row);
}
// 删除现有数据
List<int> deletedRows = Grid1.GetDeletedList();
foreach (int rowIndex in deletedRows)
{
int rowID = Convert.ToInt32(Grid1.DataKeys[rowIndex][0]);
DeleteRowByID(rowID);
}
// 新增数据
List<Dictionary<string, object>> newAddedList = Grid1.GetNewAddedList();
DataTable table = GetSourceData();
if (AppendToEnd)
{
for (int i = 0; i < newAddedList.Count; i++)
{
DataRow rowData = CreateNewData(table, newAddedList[i]);
table.Rows.Add(rowData);
}
}
else
{
for (int i = newAddedList.Count - 1; i >= 0; i--)
{
DataRow rowData = CreateNewData(table, newAddedList[i]);
table.Rows.InsertAt(rowData, 0);
}
}
labResult.Text = String.Format("修改的数据:<pre>{0}</pre>", Grid1.GetModifiedData().ToString(Newtonsoft.Json.Formatting.Indented));
BindGrid();
ShowNotify("数据保存成功!(表格数据已重新绑定)");
}
private void UpdateDataRow(Dictionary<string, object> rowDict, DataRow rowData)
{
// 姓名
UpdateDataRow("Name", rowDict, rowData);
// 性别
UpdateDataRow("Gender", rowDict, rowData);
// 所学专业
UpdateDataRow("Major", rowDict, rowData);
// 语文成绩
UpdateDataRow("ChineseScore", rowDict, rowData);
// 数学成绩
UpdateDataRow("MathScore", rowDict, rowData);
// 总成绩
UpdateDataRow("TotalScore", rowDict, rowData);
}
private void UpdateDataRow(string columnName, Dictionary<string, object> rowDict, DataRow rowData)
{
if (rowDict.ContainsKey(columnName))
{
rowData[columnName] = rowDict[columnName];
}
}
#endregion
#region Data
private static readonly string KEY_FOR_DATASOURCE_SESSION = "datatable_for_grid_editor_cell_updatecellvalue_noedit";
// 模拟在服务器端保存数据
// 特别注意在真实的开发环境中不要在Session放置大量数据否则会严重影响服务器性能
private DataTable GetSourceData()
{
if (Session[KEY_FOR_DATASOURCE_SESSION] == null)
{
Session[KEY_FOR_DATASOURCE_SESSION] = DataSourceUtil.GetDataTable();
}
return (DataTable)Session[KEY_FOR_DATASOURCE_SESSION];
}
// 根据行ID来获取行数据
private DataRow FindRowByID(int rowID)
{
DataTable table = GetSourceData();
foreach (DataRow row in table.Rows)
{
if (Convert.ToInt32(row["Id"]) == rowID)
{
return row;
}
}
return null;
}
// 根据行ID来删除行数据
private void DeleteRowByID(int rowID)
{
DataTable table = GetSourceData();
DataRow found = FindRowByID(rowID);
if (found != null)
{
table.Rows.Remove(found);
}
}
// 模拟数据库的自增长列
private int GetNextRowID()
{
int maxID = 0;
DataTable table = GetSourceData();
foreach (DataRow row in table.Rows)
{
int currentRowID = Convert.ToInt32(row["Id"]);
if (currentRowID > maxID)
{
maxID = currentRowID;
}
}
return maxID + 1;
}
#endregion
}
}