我用linq操作xml,在编辑保存的时候出现这个问题这是什么原因造成的呢?
我的代码:using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Linq;
using System.Xml;
using System.Xml.Linq;
using CM = System.Configuration.ConfigurationManager;
using System.Collections.Generic;public partial class admin_photoflashadmin : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
this.BindXml();
}
}
private void BindXml()
{
XDocument doc = XDocument.Load(this.Server.MapPath("../xml/viewerData.xml"));
this.GridView1.DataSource=from p in doc.Root.Elements("item")
select new
{
ID=p.Attribute("id").Value,
title=p.Attribute("title").Value,
img=p.Attribute("img").Value,
url=p.Attribute("url").Value,
target=p.Attribute("target").Value
};
this.GridView1.DataBind();
}
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
XDocument doc = XDocument.Load(this.Server.MapPath("../xml/viewerData.xml"));
var emp = (from p in doc.Root.Elements("item") where p.Attribute("id").Value == this.GridView1.DataKeys[e.RowIndex].Value.ToString() select p).Single();
//设定各项属性
emp.SetAttributeValue("title", Convert.ToInt32((this.GridView1.Rows[e.RowIndex].FindControl("TextBox1") as TextBox).Text));
emp.SetAttributeValue("img", Convert.ToInt32((this.GridView1.Rows[e.RowIndex].FindControl("TextBox2") as TextBox).Text));
emp.SetAttributeValue("url", Convert.ToInt32((this.GridView1.Rows[e.RowIndex].FindControl("TextBox3") as TextBox).Text));
emp.SetAttributeValue("target", Convert.ToInt32((this.GridView1.Rows[e.RowIndex].FindControl("TextBox4") as TextBox).Text));
//保存XML文档
doc.Save(this.Server.MapPath("../xml/viewerData.xml"));
this.GridView1.EditIndex = -1;
//数据绑定
this.BindXml();
}
protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
{
this.GridView1.EditIndex = e.NewEditIndex;
this.BindXml();
}
protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
this.GridView1.EditIndex = -1;
this.BindXml();
}
protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
//加载XML文档
XDocument doc = XDocument.Load(this.Server.MapPath("../xml/viewerData.xml"));
var emp = (from p in doc.Root.Elements("item") where p.Attribute("id").Value == this.GridView1.DataKeys[e.RowIndex].Value.ToString() select p).Single();
//移除节点
emp.Remove();
//保存XML文档
doc.Save(this.Server.MapPath("../xml/viewerData.xml"));
this.GridView1.EditIndex = -1;
//数据绑定
this.BindXml();
}
}
<%@ Page Language="C#" MasterPageFile="~/admin/admin.master" AutoEventWireup="true" CodeFile="photoflashadmin.aspx.cs" Inherits="admin_photoflashadmin" Title="Untitled Page" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<asp:GridView ID="GridView1" runat="server" OnRowUpdating="GridView1_RowUpdating"
CellPadding="4" ForeColor="#333333" GridLines="None" AutoGenerateColumns="False"
OnRowCancelingEdit="GridView1_RowCancelingEdit" OnRowEditing="GridView1_RowEditing" DataKeyNames="id" OnRowDeleting="GridView1_RowDeleting">
<Columns>
<asp:BoundField DataField="id" HeaderText="编号" />
<asp:TemplateField HeaderText="标题名称">
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("title") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<%# Eval("title") %>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="图片链接">
<ItemTemplate>
<%# Eval("img") %>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("img") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="文章链接">
<ItemTemplate>
<%# Eval("url") %>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="TextBox3" runat="server" Text='<%# Bind("url") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="弹出方式">
<ItemTemplate>
<%# Eval("target") %>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="TextBox4" runat="server" Text='<%# Bind("target") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:CommandField ShowEditButton="True" />
<asp:CommandField ShowDeleteButton="True" />
</Columns>
<RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
<FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
<SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
<HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
<EditRowStyle BackColor="#999999" />
<AlternatingRowStyle BackColor="White" ForeColor="#284775" />
</asp:GridView>
</asp:Content>
我的代码:using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Linq;
using System.Xml;
using System.Xml.Linq;
using CM = System.Configuration.ConfigurationManager;
using System.Collections.Generic;public partial class admin_photoflashadmin : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
this.BindXml();
}
}
private void BindXml()
{
XDocument doc = XDocument.Load(this.Server.MapPath("../xml/viewerData.xml"));
this.GridView1.DataSource=from p in doc.Root.Elements("item")
select new
{
ID=p.Attribute("id").Value,
title=p.Attribute("title").Value,
img=p.Attribute("img").Value,
url=p.Attribute("url").Value,
target=p.Attribute("target").Value
};
this.GridView1.DataBind();
}
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
XDocument doc = XDocument.Load(this.Server.MapPath("../xml/viewerData.xml"));
var emp = (from p in doc.Root.Elements("item") where p.Attribute("id").Value == this.GridView1.DataKeys[e.RowIndex].Value.ToString() select p).Single();
//设定各项属性
emp.SetAttributeValue("title", Convert.ToInt32((this.GridView1.Rows[e.RowIndex].FindControl("TextBox1") as TextBox).Text));
emp.SetAttributeValue("img", Convert.ToInt32((this.GridView1.Rows[e.RowIndex].FindControl("TextBox2") as TextBox).Text));
emp.SetAttributeValue("url", Convert.ToInt32((this.GridView1.Rows[e.RowIndex].FindControl("TextBox3") as TextBox).Text));
emp.SetAttributeValue("target", Convert.ToInt32((this.GridView1.Rows[e.RowIndex].FindControl("TextBox4") as TextBox).Text));
//保存XML文档
doc.Save(this.Server.MapPath("../xml/viewerData.xml"));
this.GridView1.EditIndex = -1;
//数据绑定
this.BindXml();
}
protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
{
this.GridView1.EditIndex = e.NewEditIndex;
this.BindXml();
}
protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
this.GridView1.EditIndex = -1;
this.BindXml();
}
protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
//加载XML文档
XDocument doc = XDocument.Load(this.Server.MapPath("../xml/viewerData.xml"));
var emp = (from p in doc.Root.Elements("item") where p.Attribute("id").Value == this.GridView1.DataKeys[e.RowIndex].Value.ToString() select p).Single();
//移除节点
emp.Remove();
//保存XML文档
doc.Save(this.Server.MapPath("../xml/viewerData.xml"));
this.GridView1.EditIndex = -1;
//数据绑定
this.BindXml();
}
}
<%@ Page Language="C#" MasterPageFile="~/admin/admin.master" AutoEventWireup="true" CodeFile="photoflashadmin.aspx.cs" Inherits="admin_photoflashadmin" Title="Untitled Page" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<asp:GridView ID="GridView1" runat="server" OnRowUpdating="GridView1_RowUpdating"
CellPadding="4" ForeColor="#333333" GridLines="None" AutoGenerateColumns="False"
OnRowCancelingEdit="GridView1_RowCancelingEdit" OnRowEditing="GridView1_RowEditing" DataKeyNames="id" OnRowDeleting="GridView1_RowDeleting">
<Columns>
<asp:BoundField DataField="id" HeaderText="编号" />
<asp:TemplateField HeaderText="标题名称">
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("title") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<%# Eval("title") %>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="图片链接">
<ItemTemplate>
<%# Eval("img") %>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("img") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="文章链接">
<ItemTemplate>
<%# Eval("url") %>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="TextBox3" runat="server" Text='<%# Bind("url") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="弹出方式">
<ItemTemplate>
<%# Eval("target") %>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="TextBox4" runat="server" Text='<%# Bind("target") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:CommandField ShowEditButton="True" />
<asp:CommandField ShowDeleteButton="True" />
</Columns>
<RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
<FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
<SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
<HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
<EditRowStyle BackColor="#999999" />
<AlternatingRowStyle BackColor="White" ForeColor="#284775" />
</asp:GridView>
</asp:Content>
肯定就是那个index 超过界限了
{
this.GridView1.EditIndex = e.Item.ItemIndex;
this.BindXml();
}e.RowIndex都改成e.Item.ItemIndex试一下
获取主键那
打一断点调试一下就知道问题在哪了。。开发时把try...catch加上。。更容易快速找到错误
OnCancelCommand="DataGrid1_CancelCommand" OnDeleteCommand="DataGrid1_DeleteCommand" OnEditCommand="DataGrid1_EditCommand" OnUpdateCommand="DataGrid1_UpdateCommand" onitemdatabound="DataGrid1_ItemDataBound"