xml文件
<?xml version="1.0" encoding="gb2312" ?>
<Leave xmlns="http://tempuri.org/leave.xsd">
  <List>
    <Item>
        <UserId>1</UserId>
        <UserName>zhangsan</UserName>
        <Email>[email protected]</Email>
        <PostDate>2011-10-10 20:23:23</PostDate>
         <Words>yes</Words>
    </Item>
  </List>
  </Leave>    webform1.aspx.cs中 "留言按钮"
        protected void Submit_Button_Click(object sender, ImageClickEventArgs e)
        {
            int id;
            DataSet data = new DataSet();
            StreamReader sr = new StreamReader(Server.MapPath("leave.xml"));
            StreamWriter sw;
            DataTable dt = new DataTable();
            DataRow dr;
            string str;
            str = sr.ReadLine();
            data.ReadXml(sr);
            sr.Close();
            dt = data.Tables["leave"];
            dr = dt.NewRow();
            if (dt.Rows.Count == 0) id = 1;
            else
                id = dt.Rows.Count + 1;
            dr["UserId"] = id;
            dr["UserName"] = UserName.Text;
            dr["Email"] = Email.Text;
            dr["PostDate"] = DateTime.Now;
            dr["Words"] = Words.Text;
            dt.Rows.Add(dr);
            sw = new StreamWriter(Server.MapPath("leave.xml"), false);
            sw.WriteLine(str);
            sw.Close();
            sw = new StreamWriter(Server.MapPath("leave.xml"), true);
            data.WriteXml(sw);
            sw.Close();
            UserName.Text = "";
            Email.Text = "";
            Words.Text = "";
            Response.Write("\t\t留言已被保存");        }
 webform2 中 窗体事件 
   protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                DataSet ds = new DataSet();
                string file = Server.MapPath("leave.xml");
                FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read);
                ds.ReadXml(fs);
                fs.Close();
                Repeater1.DataSource = ds.Tables["leave"].DefaultView;
                Repeater1.DataBind();
            }
        }
webform2.aspx
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    
        <asp:Repeater ID="Repeater1" runat="server">
     <HeaderTemplate>
          <table>
          </HeaderTemplate>
           <ItemTemplate>
     <table border=0>
      <tr><td>姓名:<%# DataBinder.Eval(Container,"DataItem.UserName") %> 
      </td></tr>
       <tr><td>留言日期:<%# DataBinder.Eval(Container,"DataItem.PostDate")%> 
       </td></tr>
       <tr><td>Email:<%# DataBinder.Eval(Container,"DataItem.Email") %> 
       </td></tr>
       <tr><td>内容:<%# DataBinder.Eval(Container,"DataItem.Words") %>
       </td></tr>
       </table>
       </ItemTemplate>
       <separatortemplate>
       <br>---------------------------------------------<br>
       </separatottemplate>
         <FooterTemplate>
            </table>
             </FooterTemplate>
        </asp:Repeater>      
    </div>
    </form>
</body>
</html>错误1:“/”应用程序中的服务器错误。
--------------------------------------------------------------------------------未将对象引用设置到对象的实例。 
说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。源错误: 
行 32:             dt = data.Tables["leave"];
行 33:          
行 34:                 dr = dt.NewRow();  //这行报错
行 35:                 if (dt.Rows.Count == 0) id = 1;
行 36:                 else
 源文件: E:\program\Message\Message\WebForm1.aspx.cs    行: 34 堆栈跟踪: 
[NullReferenceException: 未将对象引用设置到对象的实例。]
   Message.WebForm1.Submit_Button_Click(Object sender, ImageClickEventArgs e) in E:\program\Message\Message\WebForm1.aspx.cs:34
   System.Web.UI.WebControls.ImageButton.OnClick(ImageClickEventArgs e) +115
   System.Web.UI.WebControls.ImageButton.RaisePostBackEvent(String eventArgument) +120
   System.Web.UI.WebControls.ImageButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
   System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +36
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +5563 
错误2:“/”应用程序中的服务器错误。
--------------------------------------------------------------------------------未将对象引用设置到对象的实例。 
说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。源错误: 
行 21:                 ds.ReadXml(fs);
行 22:                 fs.Close();
行 23:                 Repeater1.DataSource = ds.Tables["leave"].DefaultView;//这行报错
行 24:                 Repeater1.DataBind();
行 25:             }
 源文件: E:\program\留言板\留言板\WebForm2.aspx.cs    行: 23 堆栈跟踪: 
[NullReferenceException: 未将对象引用设置到对象的实例。]
   留言板.WebForm2.Page_Load(Object sender, EventArgs e) in E:\program\留言板\留言板\WebForm2.aspx.cs:23
   System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +14
   System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +35
   System.Web.UI.Control.OnLoad(EventArgs e) +91
   System.Web.UI.Control.LoadRecursive() +74
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2207 
各位高手麻烦帮小弟解决下!!!!!!!谢了!

解决方案 »

  1.   


    把dr = dt.NewRow();  改成DataRow dr = new DataRow();
      

  2.   

    不行,编译都通不过
     错误 1 “System.Data.DataRow.DataRow(System.Data.DataRowBuilder)”不可访问,因为它受保护级别限制
      

  3.   

    你的dt是个空表吧。如果你的leave.xml文件在网站的根目录,把Server.MapPath("leave.xml")改成Server.MapPath("~/leave.xml")试试
      

  4.   

    嗯,leave.xml文件在网站的根目录下 ,改了之后还是一样的!!
      

  5.   

    应该是没取到数据源repeater绑XML
      

  6.   

    data.ReadXml(sr);
    改成data.ReadXml(str)试试
      

  7.   

    dt = data.Tables["leave"] 改成 dt = data.Tables[0] 试试
      

  8.   

    一共生成了两个表,默认名称为list和item,添加两个gridview(GridView1,GridView2),用下面代码看看两个表的内容
            DataSet data = new DataSet();
            StreamReader sr = new StreamReader(Server.MapPath("~/leave.xml"));
            
            DataTable dt = new DataTable();
            
            string str = sr.ReadLine();
            data.ReadXml(sr);
            for (int i = 0; i < data.Tables.Count; i++)
            {
                Response.Write(data.Tables[i].TableName + "<br/>");
            }
            GridView1.DataSource = data.Tables[0];
            GridView1.DataBind();
            GridView2.DataSource = data.Tables[1];
            GridView2.DataBind();
      

  9.   

    我是想将数据保存在xml中,不用  GridView,
    2:Repeater1.DataSource = ds.Tables["leave"].DefaultView;这行还是有错 
      

  10.   

    自己调试,你的引用变量是null
      

  11.   

    就是调试不出来才上来问的,引用变量的确为null,就是不明白是怎么回事
      

  12.   

    用gridview只是让你看一下数据集里的两个表的结构,你在引用的时候只能用tables["list"]和tables["item"](或者tables[0],tables[1]),因为数据表里没有"leave"这个表,所以你用"leave"是取不到数据的。