/
Default.aspx.cs
93 lines (89 loc) · 4.39 KB
/
Default.aspx.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
using DevExpress.Web;
using System;
using System.Collections;
using System.Data;
using System.Web.UI;
namespace WebApp {
public partial class Default : System.Web.UI.Page {
DataSet ds = null;
protected void Page_Init(object sender, EventArgs e) {
if (!IsPostBack || (Session["DataSet"] == null)) {
ds = new DataSet();
DataTable masterTable = new DataTable();
masterTable.Columns.Add("ID", typeof(int));
masterTable.Columns.Add("Data", typeof(string));
masterTable.PrimaryKey = new DataColumn[] { masterTable.Columns["ID"] };
DataTable detailTable = new DataTable();
detailTable.Columns.Add("ID", typeof(int));
detailTable.Columns.Add("MasterID", typeof(int));
detailTable.Columns.Add("Data", typeof(string));
detailTable.PrimaryKey = new DataColumn[] { detailTable.Columns["ID"] };
int index = 0;
for (int i = 0; i < 20; i++) {
masterTable.Rows.Add(new object[] { i, "Master Row " + i });
for (int j = 0; j < 5; j++)
detailTable.Rows.Add(new object[] { index++, i, "Detail Row " + j });
}
ds.Tables.AddRange(new DataTable[] { masterTable, detailTable });
Session["DataSet"] = ds;
}
else
ds = (DataSet)Session["DataSet"];
MasterGridView.DataSource = ds.Tables[0];
MasterGridView.DataBind();
}
protected void DetailGridView_BeforePerformDataSelect(object sender, EventArgs e) {
ds = (DataSet)Session["DataSet"];
DataTable detailTable = ds.Tables[1];
DataView dv = new DataView(detailTable);
ASPxGridView detailGridView = (ASPxGridView)sender;
dv.RowFilter = "MasterID = " + detailGridView.GetMasterRowKeyValue();
detailGridView.DataSource = dv;
}
protected void MasterGridView_RowUpdating(object sender, DevExpress.Web.Data.ASPxDataUpdatingEventArgs e) {
ds = (DataSet)Session["DataSet"];
ASPxGridView gridView = (ASPxGridView)sender;
DataTable dataTable = gridView.GetMasterRowKeyValue() != null ? ds.Tables[1] : ds.Tables[0];
DataRow row = dataTable.Rows.Find(e.Keys[0]);
IDictionaryEnumerator enumerator = e.NewValues.GetEnumerator();
enumerator.Reset();
while (enumerator.MoveNext())
row[enumerator.Key.ToString()] = enumerator.Value;
gridView.CancelEdit();
e.Cancel = true;
}
protected void MasterGridView_RowInserting(object sender, DevExpress.Web.Data.ASPxDataInsertingEventArgs e) {
ds = (DataSet)Session["DataSet"];
ASPxGridView gridView = (ASPxGridView)sender;
DataTable dataTable = gridView.GetMasterRowKeyValue() != null ? ds.Tables[1] : ds.Tables[0];
DataRow row = dataTable.NewRow();
e.NewValues["ID"] = GetNewId();
IDictionaryEnumerator enumerator = e.NewValues.GetEnumerator();
enumerator.Reset();
while (enumerator.MoveNext())
if (enumerator.Key.ToString() != "Count")
row[enumerator.Key.ToString()] = enumerator.Value;
gridView.CancelEdit();
e.Cancel = true;
dataTable.Rows.Add(row);
}
protected void MasterGridView_RowDeleting(object sender, DevExpress.Web.Data.ASPxDataDeletingEventArgs e) {
int i = MasterGridView.FindVisibleIndexByKeyValue(e.Keys[MasterGridView.KeyFieldName]);
Control c = MasterGridView.FindDetailRowTemplateControl(i, "ASPxGridView2");
e.Cancel = true;
ds = (DataSet)Session["DataSet"];
ds.Tables[0].Rows.Remove(ds.Tables[0].Rows.Find(e.Keys[MasterGridView.KeyFieldName]));
}
private int GetNewId() {
ds = (DataSet)Session["DataSet"];
DataTable table = ds.Tables[0];
if (table.Rows.Count == 0) return 0;
int max = Convert.ToInt32(table.Rows[0]["ID"]);
for (int i = 1; i < table.Rows.Count; i++) {
if (Convert.ToInt32(table.Rows[i]["ID"]) > max)
max = Convert.ToInt32(table.Rows[i]["ID"]);
}
return max + 1;
}
}
}