您的位置:首页 > 其它

GridView操作Xml数据源(添加、删除、修改)

2011-12-08 16:20 501 查看
分类:
.Net 2008-03-07 11:38
1493人阅读 评论(0)
收藏
举报
最近在做一个参数维护的功能,有52中部品,每种部品都对应一个参数表,如果用表的话就要建52张表,这不是客户所希望的,所以决定使用XML作为数据源存储信息,以下是实现的代码:

1、XML数据源的文件名为Table.xml,结构如下:

<Tables>

<SOP>

<PitchY>0.40</PitchY>

<T>0.40</T>

<B>0.40</B>

<WM>0.20</WM>

<WM1>0</WM1>

<WP>0.40</WP>

<WP1>0</WP1>

<R>0.05</R>

<LM>L-0.2</LM>

<WCM>0.18</WCM>

<WCP>0.37</WCP>

</SOP>

<SOP>

<PitchY>2.54</PitchY>

<T>0.70</T>

<B>0.80</B>

<WM>0.60</WM>

<WM1>1</WM1>

<WP>0.30</WP>

<WP1>1</WP1>

<R>0.05</R>

<LM>L</LM>

<WCM>0.50</WCM>

<WCP>0.80</WCP>

</SOP>

<DCHIP>

<BodySize>1005</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>5750</BodySize>

<L>1.50</L>

<W>5.30</W>

<D>4.10</D>

<T>0.70</T>

<S>0.15</S>

<R>0.05</R>

<Wm>5.20</Wm>

<Lm>1.30</Lm>

</DCHIP>

</Tables>

2、具体代码

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;

dr = ds.Tables[ddlShapeType.SelectedValue].Rows[row.DataItemIndex]; //找到对应与DataSet行

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();

}

转自:/article/11266629.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: