You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

绑定GridView的XML删除行时抛出System.NotSupportedException求助

解决GridView删除XML节点抛出System.NotSupportedException的问题

看起来你遇到的这个异常,大概率和数据源的读写权限、XML节点操作后的保存逻辑有关,咱们一步步拆解问题并解决:

可能的原因分析

这个System.NotSupportedException通常不是Linq to XML的Remove()方法本身的问题,而是以下几个常见场景导致:

  1. 绑定GridView的数据源是只读状态(比如用XmlDataSource但没开启删除权限)
  2. 删除节点后没有将修改保存回XML文件,导致数据源状态不一致
  3. 没有处理节点为null的情况(虽然这会抛空引用,但如果数据源逻辑有问题也可能触发不支持的操作)
  4. 应用程序对XML文件没有写入权限

修正后的完整代码方案

1. 完善Remove方法(增加保存+空值判断)

protected void Remove(string itemValue)
{
    string xmlFilePath = Server.MapPath("~/ReportConfig.xml");
    XDocument doc = XDocument.Load(xmlFilePath);

    // 先找到目标节点,避免null时调用Remove引发异常
    var targetReport = doc.Descendants("Report")
                          .Where(p => (string)p.Attribute("ID") == itemValue)
                          .FirstOrDefault();

    if (targetReport != null)
    {
        targetReport.Remove();
        // 关键:必须将修改保存回XML文件,否则所有操作都是内存中的临时变更
        doc.Save(xmlFilePath);
    }
}

2. 确保GridView的删除按钮正确传递参数

检查你的GridView模板列中,删除按钮的CommandArgument是否正确绑定了Report的ID:

<asp:TemplateField HeaderText="操作">
    <ItemTemplate>
        <asp:Button ID="btnDelete" runat="server" 
                    Text="删除" 
                    CommandName="Remove" 
                    CommandArgument='<%# Eval("ID") %>' />
    </ItemTemplate>
</asp:TemplateField>

3. 完整的RowCommand事件处理

protected void GridView1_OnRowCommand(object sender, GridViewCommandEventArgs e)
{
    if (e.CommandName.Equals("Remove", StringComparison.OrdinalIgnoreCase))
    {
        string reportId = e.CommandArgument.ToString();
        Remove(reportId);
        // 删除后重新绑定GridView,刷新界面数据
        GridView1.DataBind();
    }
}

额外的关键检查项

  • XmlDataSource权限设置:如果你的GridView是绑定XmlDataSource控件,必须在控件属性里设置EnableDelete="true",否则数据源会处于只读状态,触发不支持的操作异常。
  • 文件写入权限:确保应用程序池的身份(比如IIS AppPool\你的应用池名称)对ReportConfig.xml所在的文件夹有写入权限,否则保存XML时会抛出权限异常(也可能间接引发NotSupportedException)。

内容的提问来源于stack exchange,提问作者Amit Bhisikar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:14:08