GridView绑定xml,增、删、改、取消
1、XML数据源的文件名为Tables.xml,结构如下:
<
Tables
>
<
SOP
>
<
PitchY
>
0.20
</
PitchY
>
<
T
>
0.30
</
T
>
<
B
>
0.40
</
B
>
<
WM
>
0.40
</
WM
>
<
WM1
>1
</
WM1
>
<
WP
>
0.50
</
WP
>
<
WP1
>
0
</
WP1
>
<
R
>
0.06
</
R
>
<
LM
>
L-1
</
LM
>
<
WCM
>
0.22
</
WCM
>
<
WCP
>
0.37
</
WCP
>
</
SOP
>
<
SOP
>
<
PitchY
>
3.00
</
PitchY
>
<
T
>
0.99
</
T
>
<
B
>
0.87
</
B
>
<
WM
>
0.33
</
WM
>
<
WM1
>
1
</
WM1
>
<
WP
>
1.00
</
WP
>
<
WP1
>
1
</
WP1
>
<
R
>
0.05
</
R
>
<
LM
>
L
</
LM
>
<
WCM
>0.77
</
WCM
>
<
WCP
>
0.80
</
WCP
>
</
SOP
>
<
DCHIP
>
<
BodySize
>3000
</
BodySize
>
<
L
>
0.50
</
L
>
<
W
>
0.60
</
W
>
<
D
>
0.40
</
D
>
<
T
>
0.20
</
T
>
<
S
>
0.05
</
S
>
<
R
>
0.05
</
R
>
<
Wm
>
0.53
</
Wm
>
<
Lm
>
0.45
</
Lm
>
</
DCHIP
>
<
DCHIP
>
<
BodySize
>
1608
</
BodySize
>
<
L
>
0.70
</
L
>
<
W
>
0.90
</
W
>
<
D
>
0.80
</
D
>
<
T
>
0.30
</
T
>
<
S
>
0.05
</
S
>
<
R
>
0.05
</
R
>
<
Wm
>
0.85
</
Wm
>
<
Lm
>
0.60
</
Lm
>
</
DCHIP
>
<
DCHIP
>
<
BodySize
>
6785
</
BodySize
>
<
L
>
1.50
</
L
>
<
W
>
5.30
</
W
>
<
D
>5.30
</
D
>
<
T
>0.99
</
T
>
<
S
>
0.15
</
S
>
<
R
>
0.05
</
R
>
<
Wm
>9
.20
</
Wm
>
<
Lm
>
1.30
</
Lm
>
</
DCHIP
>
</
Tables
>
2、具体代码
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ -->
string
xmlPath
=
"
Calculation/Tables.xml
"
;
//
恢复GridView正常状态
private
void
ResetParameter() { gvParameter.EditIndex
=
-
1
; LoadParameter(ddlShapeType.SelectedValue); }
//
加载XML并显示在GridView里
private
void
LoadParameter(
string
shapeType) { DataSet dsRule
=
new
DataSet(); dsRule.ReadXml(xmlPath); DataTable dtRule
=
dsRule.Tables[shapeType]; gvParameter.DataSource
=
dtRule; gvParameter.DataBind(); }
//
新增事件
protected
void
lnbAddNew_Click(
object
sender, EventArgs e) {
if
(ddlShapeType.SelectedValue.Length
==
0
) { lblMsg.Visible
=
true
; lblMsg.Text
=
"
Warning: Please select shape type !
"
;
return
; }
else
if
(gvParameter.Rows.Count
==
0
) { lblMsg.Visible
=
true
; lblMsg.Text
=
"
Warning: [
"
+
ddlShapeType.SelectedValue
+
"
] table not exists !
"
;
return
; } DataSet ds
=
new
DataSet(); ds.ReadXml(xmlPath); DataTable dt
=
ds.Tables[ddlShapeType.SelectedValue]; DataRow dr
=
dt.NewRow(); dt.Rows.Add(dr); ds.WriteXml(xmlPath);
//
将修改写入Table.xml
ResetParameter(); }
//
编辑事件
protected
void
gvParameter_RowEditing(
object
sender, GridViewEditEventArgs e) { gvParameter.EditIndex
=
e.NewEditIndex; LoadParameter(ddlShapeType.SelectedValue); GridViewRow row
=
gvParameter.Rows[e.NewEditIndex];
//
前面2列是Delete、Edit,故从第三列开始
for
(
int
i
=
2
; i
<
row.Cells.Count; i
++
) { TextBox tb
=
(TextBox)row.Cells[i].Controls[
0
]; tb.Width
=
50
; } }
//
更新事件
protected
void
gvParameter_RowUpdating(
object
sender, GridViewUpdateEventArgs e) { GridViewRow row
=
gvParameter.Rows[e.RowIndex];
//
获得当前行
int
numCell
=
row.Cells.Count;
//
共几列单元格(包含Edit和Delete 2列)
int
currentRow
=
row.DataItemIndex;
//
对应DataSet对应的行索引
DataSet ds
=
new
DataSet(); ds.ReadXml(xmlPath); DataRow dr;
//
找到对应与DataSet行
dr
=
ds.Tables[ddlShapeType.SelectedValue].Rows[row.DataItemIndex];
string
[] str
=
null
;
//
此数组定义表的列名
switch
(ddlShapeType.SelectedValue) {
case
"
SOP
"
: { str
=
new
string
[]{
"
PitchY
"
,
"
T
"
,
"
B
"
,
"
WM
"
,
"
WM1
"
,
"
WP
"
,
"
WP1
"
,
"
R
"
,
"
LM
"
,
"
WCM
"
,
"
WCP
"
};
break
; }
case
"
DCHIP
"
: { str
=
new
string
[] {
"
BodySize
"
,
"
L
"
,
"
W
"
,
"
D
"
,
"
T
"
,
"
S
"
,
"
R
"
,
"
Wm
"
,
"
Lm
"
};
break
; } }
int
j
=
0
;
//
从第3列开始,前面有2列是Edit和Delete
for
(
int
i
=
2
; i
<
numCell; i
++
) {
string
cText
=
((TextBox)row.Cells[i].Controls[
0
]).Text; dr[str[j]]
=
cText; j
++
; } ds.WriteXml(xmlPath);
//
将修改写入Table.xml
ResetParameter(); }
//
取消修改
protected
void
gvParameter_RowCancelingEdit(
object
sender, GridViewCancelEditEventArgs e) { ResetParameter(); }
//
删除事件
protected
void
gvParameter_RowDeleting(
object
sender, GridViewDeleteEventArgs e) { GridViewRow row
=
gvParameter.Rows[e.RowIndex];
int
curr
=
row.RowIndex; DataSet ds
=
new
DataSet(); ds.ReadXml(xmlPath); DataRow dr
=
ds.Tables[ddlShapeType.SelectedValue].Rows[curr]; dr.Delete(); ds.WriteXml(xmlPath); ResetParameter(); }