<%@ Page Language="C#" AutoEventWireup="true" ContentType="text/xml"%>
<%@ Import Namespace="System.Data.SqlClient" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Configuration" %>
<%@ Import Namespace="System.Xml" %>
<script runat="server">
   
    
    XmlDocument doc;
   SqlConnection connection = new SqlConnection("user id=sa;password=sa;initial Catalog=test1;Data Source=localhost;");
   
    private void getRootTask()
    {
       connection.Open();
       string sql = "select * from MSP_Projects where PROJ_ID=1";
              SqlCommand command = new SqlCommand(sql,connection);
        SqlDataReader reader = command.ExecuteReader();
        if (!reader.Read())
        {
            reader.Close();
            connection.Close();
            Response.StatusCode = 404;
            Response.End();
        }
        doc=new XmlDocument();
    
        
        XmlElement taskNode = doc.CreateElement("Task");
        root.AppendChild(taskNode);
        
        //
        
        
        //根节点的UID缺省为0
        node = doc.CreateElement("UID");
        node.AppendChild(doc.CreateTextNode("0"));
        taskNode.AppendChild(node);
        //根节点缺省是概要任务
        node = doc.CreateElement("Summary");
        node.AppendChild(doc.CreateTextNode("1"));
        taskNode.AppendChild(node);
         
        String strCond="t.task_outline_num = 1";        CreateTasksNode(doc,strCond,1);            Response.ContentType = "text/xml";
            Response.Charset = "utf-8";
            doc.Save(Response.OutputStream);
            Response.End();
            doc=null;
    }
 
   
   private void getNextSiblingTask(string strOutlineNumber,int pageindex)
    {   
            XmlDocument doc = new XmlDocument();
            //取父任务的大纲级别号
            String str = strOutlineNumber.Substring(0, strOutlineNumber.LastIndexOf("."));
                    String strCond="t.task_outline_num like '" + str + ".%' and t.task_outline_num not like '" + str + ".%.%'";
            
            doc.AppendChild(CreateTasksNode(doc,strCond,pageindex));            Response.ContentType = "text/xml";
            Response.Charset = "utf-8";
            doc.Save(Response.OutputStream);
            Response.End();
            doc=null;
}    
  
    private XmlElement CreateTasksNode(XmlDocument doc, String strCond,int pageindex)
    {
            System.Data.SqlClient.SqlDataAdapter myAdapter = new System.Data.SqlClient.SqlDataAdapter();            SqlConnection conn = new SqlConnection("user id=sa;password=sa;initial Catalog=test1;Data Source=localhost;");
            //SqlConnection connection = new SqlConnection("user id=sa;password=sa;initial Catalog=test1;Data Source=localhost;");
            //pagesize = int.Parse(Request.QueryString["pagesize"]);            int pagesize = 5;
            //分批下载数据
            DataTable dtTask = new DataTable();
            String strSql = "SELECT top " + pagesize + " * from msp_tasks t where  " + strCond + " and TASK_UID not in(SELECT top " + (pageindex - 1) * pagesize + " TASK_UID from msp_tasks t where  " + strCond + ")";
            myAdapter.SelectCommand = new System.Data.SqlClient.SqlCommand(strSql, conn);
            myAdapter.Fill(dtTask);
            DataTable dtLink = new DataTable();
            DataView dvLink = dtLink.DefaultView;
            //DataRowView drvLink;
            strSql = "SELECT * from msp_links l inner join msp_tasks t on l.LINK_SUCC_UID=t.TASK_UID where   " + strCond;
            myAdapter.SelectCommand = new System.Data.SqlClient.SqlCommand(strSql, conn);
            myAdapter.Fill(dtLink);
            dvLink.Sort = "LINK_SUCC_UID";            XmlElement tasksNode = doc.CreateElement("Tasks");            XmlElement taskNode, node;
int i=0;            foreach (DataRow drTask in dtTask.Rows)
            {
                i++;
taskNode = doc.CreateElement("Task");
                //ChildrenDataUrl
                taskNode.SetAttribute("ChildrenDataUrl", "XmlData.aspx?action=getFirstChildTask&OutlineNumber=" + drTask["TASK_OUTLINE_NUM"] + "&pagesize=" + pagesize);
                tasksNode.AppendChild(taskNode);                node = doc.CreateElement("UID");
                node.AppendChild(doc.CreateTextNode(drTask["TASK_UID"].ToString()));
                taskNode.AppendChild(node);                node = doc.CreateElement("ID");
                node.AppendChild(doc.CreateTextNode(drTask["TASK_ID"].ToString()));
                taskNode.AppendChild(node);                node = doc.CreateElement("Name");
                node.AppendChild(doc.CreateTextNode(drTask["TASK_Name"].ToString()));
                taskNode.AppendChild(node);                node = doc.CreateElement("OutlineNumber");
                node.AppendChild(doc.CreateTextNode(drTask["TASK_OUTLINE_NUM"].ToString()));
                taskNode.AppendChild(node);                node = doc.CreateElement("Start");
                node.AppendChild(doc.CreateTextNode(string.Format("{0:s}", drTask["TASK_START_DATE"])));
                taskNode.AppendChild(node);                node = doc.CreateElement("Finish");
                node.AppendChild(doc.CreateTextNode(string.Format("{0:s}", drTask["TASK_FINISH_DATE"])));
                taskNode.AppendChild(node);                node = doc.CreateElement("TASK_LATE_START");
                node.AppendChild(doc.CreateTextNode(string.Format("{0:s}", drTask["TASK_LATE_START"])));
                taskNode.AppendChild(node);                node = doc.CreateElement("Summary");
                node.AppendChild(doc.CreateTextNode(((bool)drTask["TASK_IS_SUMMARY"] ? "1" : "0")));
                taskNode.AppendChild(node);
                node = doc.CreateElement("PercentComplete");
                node.AppendChild(doc.CreateTextNode(drTask["TASK_PCT_COMP"].ToString()));
                taskNode.AppendChild(node);
              

                XmlElement linksNode = doc.CreateElement("Links");
                taskNode.AppendChild(linksNode);
              foreach (DataRowView drvLink in dvLink.FindRows(drTask["TASK_UID"]))
                {
                    XmlElement predLink = doc.CreateElement("PredecessorLink");
                    linksNode.AppendChild(predLink);
                    node = doc.CreateElement("PredecessorUID");
                    node.AppendChild(doc.CreateTextNode(drvLink["LINK_PRED_UID"].ToString()));
                    predLink.AppendChild(node);                   
                    node = doc.CreateElement("Type");
                    node.AppendChild(doc.CreateTextNode(drvLink["LINK_TYPE"].ToString()));
                    predLink.AppendChild(node);                }                //如果已经到了指定页面大小
                if (i == pagesize )
{
                    taskNode.SetAttribute("NextSiblingDataUrl", "XmlData.aspx?action=getNextSiblingTask&OutlineNumber=" + drTask["TASK_OUTLINE_NUM"] + "&pagesize=" + pagesize + "&pageindex=" + (pageindex + 1));//设置分页下载
                
break;
}
            }                dtTask.Dispose();
                //dtLink.Dispose();
                myAdapter.Dispose();                return tasksNode;
            }
</script>

解决方案 »

  1.   

    doc=new XmlDocument();
    XmlElement taskNode = doc.CreateElement("Task");
    root.AppendChild(taskNode);root是哪里来的?
      

  2.   

    root.AppendChild(taskNode); 不好意思,没有这一句!
      

  3.   

    CreateTasksNode 方法没见到
    doc.AppendChild这个东东。
      

  4.   

      doc.AppendChild(CreateTasksNode(doc,strCond,pageindex)); 在这
      

  5.   

    doc.AppendChild(CreateTasksNode(doc,strCond,pageindex)); 
    在getNextSiblingTask方法里getNextSiblingTask什么时候调用的?
      

  6.   

    (i == pagesize )
                    {
                        taskNode.SetAttribute("NextSiblingDataUrl", "XmlData.aspx?action=getNextSiblingTask&OutlineNumber=" + drTask["TASK_OUTLINE_NUM"] + "&pagesize=" + pagesize + "&pageindex=" + (pageindex + 1));//设置分页下载
                    
                        break;
                    }在这里调用的getNextSiblingTask,是不是不对啊?
      

  7.   


    这不是调用方法,是给taskNode节点的NextSiblingDataUrl属性赋值。
    具体在哪里调用CreateTasksNode ,getNextSiblingTask 和你的网页操作流程相关。