使用vs2005经验与教训(关于masterpage,menu,gridview及对exce的l操作)

1,Masterpage
    我在毕业设计的题目算是个E_Learning System 吧!^_^。
    用户分为三种类型:老师,学生,管理员。在登录时,将用户信息及用户类型存在cookies中。由cookies中的用户类型判断显示对应的菜单。这样就在建立一个mastepage,上面放个menu控件,在mastpage中通过
    

 HttpCookieCollection cookies=Request.Cookies;
if (cookies["usertype"] != null)
        {
            usertype = cookies["usertype"].Value;
        }

获取用户的类型,给menu绑定不同的xml数据源来显示不同的菜单!起先并没有发现问题。我为了方便,没有在页面中判断权限(为了不至于每次都要登陆),但后来我需要在使用了masterpage的普通页面中获取cookies中用户信息时,问题出现了:打开这样的页面时,一直打不开页面,cpu的占用率100%,直到最后超时。
不知道有没有在masterpage和引用它的页面里同时使用cookies的方法?请高人指点!

2,Menu控件绑定xml数据缘的笨办法
针对不同类型用户显示不同菜单

 XmlDataSource xds = new XmlDataSource();
        xds.DataFile = "~/Menu.xml";//自己写的xml文件
        switch (usertype)
        {
            case "admin": xds.XPath = "menu/admin/*"; break;
            case "teacher": xds.XPath = "menu/teacher/*"; break;
            case "student": xds.XPath = "menu/student/*"; break;
            default: xds.XPath = "menu/default/*"; break;
        }
        menu.DataSource = xds;
        menu.DataBind();
//以上为绑定xml数据源

switch (usertype)
        {

            case "admin":
                menu.Items[0].NavigateUrl = "myinfo.aspx";
                menu.Items[1].NavigateUrl = "student.aspx";
            ……
            ……
//以上为添加链接部分

  menu.xml文件

<menu>
  <default>
  <系统通知/><!--default.aspx-->
  <师生交流/><!--elearningbbs.aspx-->
  <系统登陆/><!--login.aspx-->
  <系统说明/><!--explain.aspx-->
  </default>
  <admin>
    <我的信息/><!--myinfo.aspx-->
    <学生管理/><!--stutent.aspx-->
    <老师管理/><!--teacher.aspx-->
    <科目管理/><!--course.aspx-->
    <答疑管理/><!--elearningbbs.aspx-->
    <通知管理/><!--default.aspx-->
    <系统帮助/><!--help.aspx-->
    <退出系统/><!--logout.aspx-->
  </admin>
   ……
……
</menu>

请推荐更好的办法!
3,GridView中删除的小技巧
在GridView中删除行后如果不重新加载数据,删除的行还会显示出来。
通过程序绑定数据集时还方便重新加载。
我通过以下方法解决:

 ……执行delete的sql语句
GridView1.Rows[i].Visible = false;//i表示第几行。总之就是让删除的这行的visible=false;
……

如果这种方法不可取请指出!
4,对Excel的操作
将我的这篇Access 通用数据访问类(asp.net 2.0 c#)的打开链接部分的链接字符串部分稍做修改即可对excel进行操作

 private static void openExcel(string filename)
//这里添加参数,引进操作的excel表名,当然也可以操作固定的excel文件
    {
        if (conn.State == ConnectionState.Closed)
        {
            conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + ConfigurationManager.AppSettings["myexcel"] + filename + "; Extended Properties=Excel 8.0;";
            comm.Connection = conn;
            try
            {
                conn.Open();
            }
            catch (Exception e)
            { throw new Exception(e.Message); }
        }
    }
……
 该类中的其他方法类似,也可添加引进文件名的参数

public static void excuteSql(string filename,string sqlstr)

执行create table语句可以在名为filename的excel文件中新建表

当指定的名为filename 的excel文件不存在时,将自动创建。从这里了解到的。
 我在从excel文件导入数据库及从gridview中导出excel文件时应用,具体步骤
导入:

 使用Fileupload控件上传excel文件,指定系统时间为e
sqlstr="select * from (excel中的工作表名,不是excel文件名)"……//查询语句
DateSet ds=DataAccess.dataSet(sqlt);
gridview1.datasource=ds;
gridview.DataBind();
然后删除上传的文件

导出:

 指定文件名为当前日期时间
strsql="create table……"//创建表语句
 DataAccess.excutesql(filename, strsql);
strsql1="insert into "//插入语句,值为gridview中显示的内容。
DataAccess.excutesql(filename,sqlstr1);

针对excel的导入导出你就理解为对数据库的操作就很简单了。
当然更复杂的对excel的格式等操作就不是这样了,那就需要com组件了。
posted @ 2006-05-22 12:19  火火  阅读(1370)  评论(1)    收藏  举报