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

139 lines
4.9 KiB
C#
Raw Permalink 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_newdelete_getmergeddata : 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("EntranceYear", "2015");
defaultObj.Add("EntranceDate", "2015-09-01");
defaultObj.Add("AtSchool", false);
defaultObj.Add("Major", "化学系");
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();
}
protected void Button2_Click(object sender, EventArgs e)
{
if (Grid1.GetModifiedData().Count == 0)
{
Alert.Show("表格数据没有变化!");
return;
}
// 复制原始表格的结构
DataTable newTable = GetSourceData().Clone();
DataRow newRow;
JArray mergedData = Grid1.GetMergedData();
foreach (JObject mergedRow in mergedData)
{
string status = mergedRow.Value<string>("status");
int rowIndex = mergedRow.Value<int>("index");
JObject values = mergedRow.Value<JObject>("values");
newRow = newTable.NewRow();
newRow[0] = rowIndex; // 将行标识符设置为行索引号
newRow[1] = values.Value<string>("Name");
newRow[2] = values.Value<int>("EntranceYear");
newRow[3] = values.Value<bool>("AtSchool");
newRow[4] = values.Value<string>("Major");
newRow[5] = values.Value<int>("Gender");
newRow[6] = values.Value<string>("EntranceDate");
newTable.Rows.Add(newRow);
}
// 更新数据源
Session[KEY_FOR_DATASOURCE_SESSION] = newTable;
labResult.Text = String.Format("用户修改的数据:<pre>{0}</pre>", Grid1.GetModifiedData().ToString(Newtonsoft.Json.Formatting.Indented));
BindGrid();
Alert.Show("数据保存成功!(表格数据已重新绑定)");
}
#endregion
#region Data
private static readonly string KEY_FOR_DATASOURCE_SESSION = "datatable_for_grid_editor_cell_newdelete_getmergeddata";
// 模拟在服务器端保存数据
// 特别注意在真实的开发环境中不要在Session放置大量数据否则会严重影响服务器性能
private DataTable GetSourceData()
{
if (Session[KEY_FOR_DATASOURCE_SESSION] == null)
{
Session[KEY_FOR_DATASOURCE_SESSION] = DataSourceUtil.GetSimpleDataTable();
}
return (DataTable)Session[KEY_FOR_DATASOURCE_SESSION];
}
#endregion
}
}