/// <summary>
/// 初始化目录树
/// </summary>
private void InitTree()
{
//生成数据源
CreateDataSource();

//显示目录树
InitTree(trvFolder.Nodes,TopParentUrl);
} /// <summary>
/// 递归地生成目录树
/// </summary>
/// <param name="nodes"></param>
/// <param name="parentId"></param>
private void InitTree(TreeNodeCollection nodes,string parentId)
{
try
{
//创建视图对象
DataView dv=new DataView(); //临时节点
TreeNode tmpNode;
string strId; //获取Table表
dv.Table=(DataTable) Page.Cache[CacheKeyName];
dv.RowFilter="ParentUrl='" + parentId + "'" ; //遍历循环
foreach(DataRowView drv in dv)
{
//创建一个TreeNode
tmpNode=new TreeNode();
tmpNode.ID=drv[TreeNodeField.ConUrl].ToString();
tmpNode.Text=drv[TreeNodeField.ConDisplayName ].ToString();
nodes.Add(tmpNode);
strId=drv[TreeNodeField.ConParentUrl].ToString(); //调用自身
InitTree(tmpNode.Nodes,tmpNode.ID);
}
}
catch(Exception ex)
{
throw new Exception(ex.Message);
}
} /// <summary>
/// 取得数据源
/// </summary>
private void CreateDataSource()
{
//取得目录的数据
DataTable data=(DataTable) Page.Cache[CacheKeyName]; //如果没有缓存,则需要重新取数据
if (data == null)
{ //-------------------------这段为测试数据---------------------
data=new DataTable();
data.TableName="FolderTree";
data.Columns.Add(TreeNodeField.ConUrl);
data.Columns.Add(TreeNodeField.ConDisplayName);
data.Columns.Add(TreeNodeField.ConParentUrl);

DataRow row;
//根目录
row=data.NewRow();
row[TreeNodeField.ConUrl ]=0;
row[TreeNodeField.ConDisplayName ]="文件夹目录";
row[TreeNodeField.ConParentUrl]="";
data.Rows.Add(row); //子目录
for(int i=1;i<=5;i++)
{
row=data.NewRow();
row[TreeNodeField.ConUrl]=i.ToString();
row[TreeNodeField.ConDisplayName]="一级子目录"+i.ToString();
row[TreeNodeField.ConParentUrl]=0;
data.Rows.Add(row); for(int j=0;j<5;j++)
{
row=data.NewRow();
row["Url"]=i.ToString()+j.ToString();
row["DisplayName"]="二级子目录"+i.ToString()+j.ToString();
row["ParentUrl"]=i.ToString();
data.Rows.Add(row);
}
}
//-------------------------这段为测试数据---------------------
//将数据缓存
this.Page.Cache.Insert(CacheKeyName,data,null, 
DateTime.Now.AddSeconds(CacheDuration), 
System.Web.Caching.Cache.NoSlidingExpiration);
} }
/// <summary>
/// 缓存名称
/// </summary>
private string CacheKeyName 
{
get 
{
return UniqueID + "_Data";
}
} /// <summary>
/// 根目录Url(表中第一行的Url)
/// </summary>
private string TopParentUrl
{
get
{
//取得数据
CreateDataSource();
DataTable data=(DataTable) Page.Cache[CacheKeyName];
//返回第一行的Url值
return (string)data.Rows[0][TreeNodeField.ConUrl];
}
} /// <summary>
/// 订阅事件处理
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void lnbtnSubscription_Click(object sender, EventArgs e)
{
this.Page.Response.Write("<script>alert('订阅')</script>");
}

/// <summary>
/// 删除目录事件处理
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void lnbtnDelete_Click(object sender, EventArgs e)
{
this.Page.Response.Write("<script>alert('删除')</script>"); } /// <summary>
/// 增加目录事件处理
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void lnbtnAdd_Click(object sender, EventArgs e)
{
this.Page.Response.Write("<script>alert('增加')</script>");
} /// <summary>
/// 树节点选择事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void trvFolder_SelectedIndexChange(object sender, Microsoft.Web.UI.WebControls.TreeViewSelectEventArgs e)
{
OnPageIndexChanged(e);
} #endregion }
}

解决方案 »

  1.   


    http://community.csdn.net/Expert/topic/3150/3150444.xml?temp=.3521234
    一样的问题,最后一贴错了。
      

  2.   

    这个问题同:
    http://community.csdn.net/Expert/topic/3150/3150444.xml?temp=.8042414
    解决了一起结贴
      

  3.   

    我的代码运行没出错,只是treeview看不见,能不能用MSN啊?我的MSN:
    [email protected]
      

  4.   

    TO  goody9807() 、redbb(....Dotneter....) :
    我没有收到啊!
    能不能发到[email protected] ?
    请问2位的MSN是多少?我好向你们计教,我的是:[email protected]
      

  5.   

    发完了 OK
    [email protected]
      

  6.   

    兄弟,你应该加这么个函数
    protected override void OnLoad(EventArgs e)
    {
      base.OnLoad();
      DataBind();
    }你这个树要想出现,你得有节点才行,结果你把它放到了DataBind()函数里了,那么你的页面每次回发的时候你都得手动调用DataBind()才行,那不是麻烦吗,所以你就放到OnLoad里
      

  7.   

    我刚才把初始化树的函数放入webform中式也是不行 但是 我自己写的生成节点的那个没问题
      

  8.   

    我发现CreateChildControls这个函数会执行2次,当初始化树的函数InitTree执行后,CreateChildControls还执行了一次,所以把先前的数据清掉了。
      

  9.   

    你的递归的 我也弄出来了private void Page_Load(object sender, System.EventArgs e)
    {
    this.trvFolder=new TreeView();
    this.trvFolder.ID="trvFolder";
    this.trvFolder.Enabled =true;
    this.trvFolder.Visible =true;
    this.trvFolder.Height=200;
    this.trvFolder.Width=200;
    this.trvFolder.ShowLines=true;
    this.trvFolder.ShowPlus =true;
    this.trvFolder.SelectExpands=true;
    this.trvFolder.ShowToolTip =true;
    this.trvFolder.ToolTip ="aaaa文件夹目录";
    TreeNode tmpNode = new TreeNode();
    tmpNode.Text ="test1";
    TreeNode tmpNode2 = new TreeNode();
    tmpNode2.Text ="test2";
    this.trvFolder.Nodes.Add(tmpNode);
    this.trvFolder.Nodes.Add(tmpNode2);
        this.InitTree();
    this.Controls.Add(trvFolder);
    }
      

  10.   

    private struct TreeNodeField
    {
    /// <summary>
    /// 目录Url
    /// </summary>
    public const string ConUrl="Url"; /// <summary>
    /// 目录显示名称
    /// </summary>
    public const string ConDisplayName="DisplayName"; /// <summary>
    /// 目录父Url
    /// </summary>
    public const string ConParentUrl="ParentUrl";

    }

    private void InitTree()
    {

    CreateDataSource();

    InitTree(trvFolder.Nodes,TopParentUrl);
    }
    private void InitTree(TreeNodeCollection nodes,string parentId)
    {
    try
    {
    //创建视图对象
    DataView dv=new DataView(); //临时节点
    TreeNode tmpNode;
    string strId; //获取Table表
    //dv.Table=(DataTable) Page.Cache[CacheKeyName];
    dv.Table =CDS();
    dv.RowFilter="ParentUrl='" + parentId + "'" ; //遍历循环
    foreach(DataRowView drv in dv)
    {
    //创建一个TreeNode
    tmpNode=new TreeNode();
    tmpNode.ID=drv[TreeNodeField.ConUrl].ToString();
    tmpNode.Text=drv[TreeNodeField.ConDisplayName ].ToString();
    nodes.Add(tmpNode);
    strId=drv[TreeNodeField.ConParentUrl].ToString(); //调用自身
    InitTree(tmpNode.Nodes,tmpNode.ID);
    }
    }
    catch(Exception ex)
    {
    throw new Exception(ex.Message);
    }
    }

    /// <summary>
    /// 取得数据源
    /// </summary>
    private void CreateDataSource()
    {
    //取得目录的数据
    DataTable data=(DataTable) Page.Cache[CacheKeyName];
          
    //如果没有缓存,则需要重新取数据
    if (data == null)
    { //-------------------------这段为测试数据---------------------
    data=new DataTable();
    data.TableName="FolderTree";
    data.Columns.Add(TreeNodeField.ConUrl);
    data.Columns.Add(TreeNodeField.ConDisplayName);
    data.Columns.Add(TreeNodeField.ConParentUrl);

    DataRow row;
    //根目录
    row=data.NewRow();
    row[TreeNodeField.ConUrl ]=0;
    row[TreeNodeField.ConDisplayName ]="文件夹目录";
    row[TreeNodeField.ConParentUrl]="";
    data.Rows.Add(row); //子目录
    for(int i=1;i<=5;i++)
    {
    row=data.NewRow();
    row[TreeNodeField.ConUrl]=i.ToString();
    row[TreeNodeField.ConDisplayName]="一级子目录"+i.ToString();
    row[TreeNodeField.ConParentUrl]=0;
    data.Rows.Add(row); for(int j=0;j<5;j++)
    {
    row=data.NewRow();
    row["Url"]=i.ToString()+j.ToString();
    row["DisplayName"]="二级子目录"+i.ToString()+j.ToString();
    row["ParentUrl"]=i.ToString();
    data.Rows.Add(row);
    }
    }
    //-------------------------这段为测试数据---------------------
    //将数据缓存
    this.Page.Cache.Insert(CacheKeyName,data,null, 
    DateTime.Now.AddSeconds(CacheDuration), 
    System.Web.Caching.Cache.NoSlidingExpiration);
    }
    }
    private DataTable CDS()
    {
    DataTable data;
    data=new DataTable();
    data.TableName="FolderTree";
    data.Columns.Add(TreeNodeField.ConUrl);
    data.Columns.Add(TreeNodeField.ConDisplayName);
    data.Columns.Add(TreeNodeField.ConParentUrl);

    DataRow row;
    //根目录
    row=data.NewRow();
    row[TreeNodeField.ConUrl ]=0;
    row[TreeNodeField.ConDisplayName ]="文件夹目录";
    row[TreeNodeField.ConParentUrl]="";
    data.Rows.Add(row); //子目录
    for(int i=1;i<=5;i++)
    {
    row=data.NewRow();
    row[TreeNodeField.ConUrl]=i.ToString();
    row[TreeNodeField.ConDisplayName]="一级子目录"+i.ToString();
    row[TreeNodeField.ConParentUrl]=0;
    data.Rows.Add(row); for(int j=0;j<5;j++)
    {
    row=data.NewRow();
    row["Url"]=i.ToString()+j.ToString();
    row["DisplayName"]="二级子目录"+i.ToString()+j.ToString();
    row["ParentUrl"]=i.ToString();
    data.Rows.Add(row);
    }
    }
    return data;
    }
    public int CacheDuration
    {
    get {return Convert.ToInt32(ViewState["CacheDuration"]);}
    set {ViewState["CacheDuration"] = value;} } /// <summary>
    /// 缓存名称
    /// </summary>
    private string CacheKeyName 
    {
    get 
    {
    return UniqueID + "_Data";
    }
    } /// <summary>
    /// 根目录Url(表中第一行的Url)
    /// </summary>
    private string TopParentUrl
    {
    get
    {
    //取得数据
    CreateDataSource();
    DataTable data=(DataTable) Page.Cache[CacheKeyName];
    //返回第一行的Url值
    return (string)data.Rows[0][TreeNodeField.ConUrl];
    }
    }
    private void Button1_Click(object sender, System.EventArgs e)
    {
    string SourceFile="Data.XLS";                                

    string TemplatePath=Server.MapPath("ExcelTemplate");    

    string DownloadPath=Server.MapPath("ExcelDownload");    

    string TempFileName = DateTime.Now.ToString("yyyyMMdd") + 
    DateTime.Now.Hour + DateTime.Now.Minute + DateTime.Now.Second + ".XLS"; object missing = System.Reflection.Missing.Value; Excel.Application myExcel=new Excel.Application();
           
    myExcel.Application.Workbooks.Open(TemplatePath+"\\"+SourceFile,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing);
    Excel.Workbook myBook=myExcel.Workbooks[1];
    Excel.Worksheet curSheet = (Excel.Worksheet)myBook.Sheets[1]; string DownloadFilePath=DownloadPath+"\\"+TempFileName; int i=0;
    while (i<=10)
    {

    myExcel.Cells[4+i,2]=i.ToString();
    myExcel.Cells[4+i,3]=i.ToString();
    myExcel.Cells[4+i,4]=i.ToString();
    myExcel.Cells[4+i,5]=i.ToString();
    myExcel.Cells[4+i,6]=i.ToString();
    i++;
    }
                curSheet.Cells.Font.Bold =true;
                curSheet.Cells.Font.Name ="Verdana"; //myBook.Saved=true; myBook.SaveAs(DownloadFilePath,missing,"","",false,false,Excel.XlSaveAsAccessMode.xlNoChange,1,false,missing,missing,missing); //myBook.PrintPreview(0);
    //myBook.PrintOut(missing,missing,missing,missing,missing,missing,missing,missing);
    myBook.Close(false, null,null);
    myExcel.Quit();
    System.Runtime.InteropServices.Marshal.ReleaseComObject(myBook);
    System.Runtime.InteropServices.Marshal.ReleaseComObject(myExcel);
    myBook = null;
    myExcel = null;
    GC.Collect();
        string pstr="ExcelDownload//"+TempFileName;
    // Response.Write("<a href="+pstr+">open file</a>");
    // Response.End();
                System.Diagnostics.Process.Start(pstr);
    //Response.Redirect("ExcelDownload//"+TempFileName);
    }
    }
      

  11.   

    问题解决了大半了,是关闭这个CASE的时间了,非常感觉各位的帮助,特别谢谢goody9807() ,花了足够的时间帮我,再次感谢!