您的位置:首页 > 其它

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

2006-05-22 12:19 621 查看
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组件了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: