当前位置:编程学习 > C#/ASP.NET >>

文档管理系统问题,请指教??

最近做了个文档管理系统,使用treeview和gridview,tree放在左框架里,gridview放在主框架里.
tree的节点是由数据库动态生成的,通过判断选择了节点的,主框架里的gridiew显示不同的内容.如果不使用框架,就把tree和gridview放在一个页面下了,测试能成功.但是放在框架后,第一次必须选择节点两次才触发gridview显示.同时我原来在页面下能实现的删除事件和打开选中事件也都失效了.恳请各路高手伸出援助之手.主要代码如下.
treeview的selectednodechanged事件的代码
protected void TV_SelectedNodeChanged(object sender, EventArgs e)
    {   
        string depth = TV.SelectedNode.Depth.ToString();
        string nodetext = TV.SelectedNode.Text.ToString();
        string nodeparent;
        switch (depth )//若为根节点不传父节点,不然会得到空值
        {
            case "0":                
                TV.SelectedNode.NavigateUrl = "main.aspx?nodetext="+nodetext+"&depth="+depth ;
                break;
            case "1":
                TV.SelectedNode.NavigateUrl = "main.aspx?nodetext=" + nodetext + "&depth=" + depth;
                break;
            case "2":
                nodeparent =TV.SelectedNode .Parent .Text .ToString ();
                TV.SelectedNode.NavigateUrl = "main.aspx?nodetext=" + nodetext + "&depth=" + depth+"&nodeparent="+nodeparent ;
                break;
            default :
                break; 
    }
    }
主框架里的main.aspx的代码

 protected void DataBinds()
    {//传回所选节点文本,父节点文本和所选节点深度
         
        int depth = Convert.ToInt32(Request .QueryString ["depth"].ToString ());
        string nodeselect = Request.QueryString["nodetext"].ToString();      
        SqlConnection objConnection = new SqlConnection(strConnection);  
        switch (depth)
           {
            case 0:

                //所选节点为系统.
                String strSQL0 = "select * from DocInfo where DepName='" + nodeselect  + "'";
                SqlDataAdapter da0 = new SqlDataAdapter(strSQL0, objConnection);
                DataSet Result0 = new DataSet();
                da0.Fill(Result0);
                //绑定数据到GridView
                this.GridView1.DataSource = Result0;
                GridView1.DataKeyNames = new string[] { "DocID" };
                this.GridView1.DataBind();
                break;
            case 1:
                //所选节点为项目
                //绑定数据到GridView
                String strSQL1 = "select * from DocInfo where ProName='" + nodeselect  + "'";
                SqlDataAdapter da1 = new SqlDataAdapter(strSQL1, objConnection);
                DataSet Result1 = new DataSet();
                da1.Fill(Result1);
                this.GridView1.DataSource = Result1;
                GridView1.DataKeyNames = new string[] { "DocID" };
                this.GridView1.DataBind();
                break;
            case 2:
                //所选节点为类别
                //绑定数据到GridView
                string nodeparent = Request.QueryString["nodeparent"].ToString();
                String strSQL2 = "select * from DocInfo where ProName='" +nodeparent  + "'and lbName='" + nodeselect  + "' ";
                SqlDataAdapter da2 = new SqlDataAdapter(strSQL2, objConnection);
                DataSet Result2 = new DataSet();
                da2.Fill(Result2);
                this.GridView1.DataSource = Result2;
                GridView1.DataKeyNames = new string[] { "DocID" };
                this.GridView1.DataBind();
                break;
            default:
                // 显示信息.
                break;
              }
        }

删除选中事件代码,我这里是在页面里加了一个button控件的.gridview模板列里放了checkbox

protected void btnDeleteCheck_Click(object sender, EventArgs e)
    {
        String sqlText = "(";

        for (int i = 0; i < GridView1.Rows.Count; i++)
        {

            CheckBox cbx = (CheckBox)GridView1.Rows[i].FindControl("chkSelect");
            if (cbx.Checked == true)
            {
                sqlText = sqlText + Convert.ToInt32(GridView1.DataKeys[i].Value) + ",";

            }
        }
        sqlText = sqlText.Substring(0, sqlText.Length - 1) + ")";
        sqlText = "delete DocInfo where DocID in" + sqlText;

        try
        {
            //执行删除语句 
            SqlConnection conn = new SqlConnection(strConnection);
            conn.Open();
            SqlCommand cmd = new SqlCommand(sqlText, conn);
            int delCount = Convert.ToInt32(cmd.ExecuteNonQuery()); //删除记录数量
            Response.Write("<script>alert('共删除" + delCount + "条数据');</script>");
            DataBinds();
        }
        catch (Exception ex)
        {
            //若有错误发生,输出错误信息 
            Response.Write("<script>alert('您没有选中任何数据');</script>");

        }
    }

打开选中事件,也是另加了一个button控件
protected void btnOpen_Click(object sender, EventArgs e)
    { 
        
        for (int i = 0; i < GridView1.Rows.Count; i++)
        {

            CheckBox cbx = (CheckBox)GridView1.Rows[i].FindControl("chkSelect");
            if (cbx.Checked == true)
            {
                int DocID = Convert.ToInt32(GridView1.DataKeys[i].Value);               
                Response.Redirect("openfile.aspx?DocID=" + DocID);//这里是一个下载二进制流的aspx

            }
        }
请问这是为什么??(当然若tree和gridview放在一个页面下,绑定函数略有不同,但方法是一样的,只不过不需要传值了,只需通过tV.Node.Depth/TV.SelectedNode.Text/TV.SelectedNode.Parent.Text来定义查询语句就可以了)
1.为什么tree选择节点两次才显示数据.
2.我的删除事件和打开选中事件都不能执行,为什么?
--------------------编程问答-------------------- 做个沙发先
--------------------编程问答-------------------- 怎么没人理啊,我好苦恼啊 --------------------编程问答-------------------- 请高手来解答吧  ^_^ --------------------编程问答--------------------  第一个问题,因为你tree的node的Change事件没有发生变化,所以gridview没有显示。当你点击之后触发了change事件
第二个问题,没看明白为什么不行。 --------------------编程问答-------------------- ispostback --------------------编程问答-------------------- 第二个问题,你放个断点,看能取到DocID的值吗? --------------------编程问答-------------------- 我是楼主,原来的密码失效了,换了个用户名上来.
谢谢huming_h的指点.
但是,第一个问题我该怎样实现第一次点节点就实现数据绑定呢,是不是应该换一个事件?/
第二个问题,难道放在FRAME框架里DocID就不能获取了吗?我在单独的aspx文件下是可以实现的啊.
请大虾们帮忙. --------------------编程问答-------------------- 请大家一定要帮忙啊 --------------------编程问答-------------------- 题目太长了,没心思去看,

你要弄文章管理系统(CMS)?

你去多看看CMS的内容啊.别人怎么设计的,我觉得基本上不应该用控件什么吧.
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,