1.把数据绑定到CheckBoxList中 protected void Page_Load(object sender, EventArgs e){if (!Page.IsPostBack){SqlConnection con = GetDBCon.GetCon();con.Open();SqlDataAdapter sda = new SqlDataAdapter("select * from admin", con);DataSet ds = new DataSet();sda.Fill(ds,"admin");this.CheckBoxList1.DataSource = ds.Tables[0];this.CheckBoxList1.DataTextField = "username";//绑定的字段名this.CheckBoxList1.DataValueField = "userid";//绑定的值this.CheckBoxList1.DataBind(); }} 2.循环读取出来 protected void CheckBoxList1_SelectedIndexChanged(object sender, EventArgs e){this.Lab2.Text = "";for (int i = 0; i < CheckBoxList1.Items.Count; i++){if (this.CheckBoxList1.Items[i].Selected){this.Lab2.Text = this.Lab2.Text+CheckBoxList1.Items[i].Text+".";}}} #region 设置或者得到CheckBoxList选中了的值 /**//// <summary> /// 初始化CheckBoxList中哪些是选中了的 /// </summary> /// <param name="checkList">CheckBoxList</param> /// <param name="selval">选中了的值串例如:"0,1,1,2,1"</param> /// <param name="separator">值串中使用的分割符例如"0,1,1,2,1"中的逗号</param> public static string SetChecked(CheckBoxList checkList,string selval,string separator) …{ selval = separator + selval + separator; //例如:"0,1,1,2,1"->",0,1,1,2,1," for(int i=0; i<checkList.Items.Count; i++) …{ […]
View Details接管负责了公司的一个项目网站后台管理,客服部要求会话间隔时间能长点,于是在web.config里改了outtime设置,设成了8个小时,一个工作日的时间,可是修改后居然不起作用,依旧是20分钟不操作就得重登录。于是把服务器上的IIS超时设置也改了,会话超时设置成480分钟,但是问题仍然存在(关于outtime的设置,一般web.config的优先级别高于machine.config高于IIS设置。)。仔细查看了代码,是用session保存信息而不是cookie,代码中没有有关超时的设置了。搞了半天问题才解决。 session本来是个不稳定的东西,经常会被丢失,本来用cookie不错,但又不想对程序做改动。查了查资料,找到了下面一段: 由于Asp.net程序是默认配置,所以Web.Config文件中关于Session的设定如下: <sessionState mode="InProc" stateConnectionString="tcpip=127.0.0.1:42424" sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes" cookieless="true" timeout="20"/> 我们会发现sessionState标签中有个属性mode,它可以有3种取值:InProc、StateServer、SQLServer(大小写敏感)。默认情况下是InProc,也就是将Session保存在进程内(IIS5是aspnet_wp.exe,而IIS6是W3wp.exe),这个进程不稳定,在某些事件发生时,进程会重起,所以造成了存储在该进程内的Session丢失。 哪些情况下该进程会重起呢?微软的一篇文章告诉了我们: 1、配置文件中processModel标签的memoryLimit属性 2、Global.asax或者Web.config文件被更改 3、Bin文件夹中的Web程序(DLL)被修改 4、杀毒软件扫描了一些.config文件。 更多的信息请参考PRB: Session variables are lost intermittently in ASP.NET applications 解决办法: 前面说到的sessionState标签中mode属性可以有三个取值,除了InProc之外,还可以为StateServer、SQLServer。这两种存Session的方法都是进程外的,所以当aspnet_wp.exe重起的时候,不会影响到Session。 现在请将mode设定为StateServer。StateServer是本机的一个服务,可以在系统服务里看到服务名为ASP.NET State Service的服务,默认情况是不启动的。当我们设定mode为StateServer之后,请手工将该服务启动。 这样,我们就能利用本机的StateService来存储Session了,除非电脑重启或者StateService崩掉,否则Session是不会丢的(因Session超时被丢弃是正常的)。 除此之外,我们还可以将Session通过其他电脑的StateService来保存。具体的修改是这样的。同样还在sessionState标签中,有个stateConnectionString= "tcpip=127.0.0.1:42424 "属性,其中有个ip地址,默认为本机(127.0.0.1),你可以将其改成你所知的运行了StateService服务的电脑IP,这样就可以实现位于不同电脑上的Asp.net程序互通Session了。 如果你有更高的要求,需要在服务期重启时Session也不丢失,可以考虑将mode设定成SQLServer,同样需要修改sqlConnectionString属性。 在使用StateServer或者SQLServer存储Session时,所有需要保存到Session的对象除了基本数据类型(默认的数据类型,如int、string等)外,都必须序列化。只需将[Serializable]标签放到要序列化的类前就可以了。 如: [Serializable] public class MyClass { …… } stateConnectionString和sqlConnectionString是当设置mode的方式是stateServer和sqlServer的时候,必须的选项;但是当mode配置为InProc时,并不是必须的。 转自:http://fus53.blog.163.com/blog/static/735886152008476627520/ 以下由【龙生时代】补充:
1 2 |
用以下命令生成状态数据库 C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regsql.exe -C "Data Source=.;Integrated Security=True" -ssadd -sstype p |
/// <summary>/// DataSet导出Excel/// </summary>/// <param name="arrTitle">列标题,若为null,则直接取dataset列标题</param>/// <param name="ds">要导出的DataSet</param>/// <param name="fileName">Excel文件名,不需要传入扩展名</param>protected void CreateExcel(string[] arrTitle, DataSet ds, string fileName){StringBuilder strb = new StringBuilder();strb.Append(" <html xmlns:o=\"urn:schemas-microsoft-com:office:office\"");strb.Append("xmlns:x=\"urn:schemas-microsoft-com:office:excel\"");strb.Append("xmlns=\"http://www.w3.org/TR/REC-html40\"");strb.Append(" <head> <meta http-equiv=’Content-Type' content=’text/html; charset=gb2312′>");strb.Append(" <style>");strb.Append(".xl26");strb.Append(" {mso-style-parent:style0;");strb.Append(" font-family:\"Times New Roman\", serif;");strb.Append(" mso-font-charset:0;");strb.Append(" mso-number-format:\"@\";}");strb.Append(" </style>");strb.Append(" <xml>");strb.Append(" <x:ExcelWorkbook>");strb.Append(" <x:ExcelWorksheets>");strb.Append(" <x:ExcelWorksheet>");strb.Append(" <x:Name>Sheet1 </x:Name>");strb.Append(" <x:WorksheetOptions>");strb.Append(" <x:DefaultRowHeight>285 </x:DefaultRowHeight>");strb.Append(" <x:Selected/>");strb.Append(" <x:Panes>");strb.Append(" <x:Pane>");strb.Append(" <x:Number>3 </x:Number>");strb.Append(" <x:ActiveCol>1 </x:ActiveCol>");strb.Append(" </x:Pane>");strb.Append(" </x:Panes>");strb.Append(" <x:ProtectContents>False </x:ProtectContents>");strb.Append(" <x:ProtectObjects>False </x:ProtectObjects>");strb.Append(" <x:ProtectScenarios>False </x:ProtectScenarios>");strb.Append(" </x:WorksheetOptions>");strb.Append(" </x:ExcelWorksheet>");strb.Append(" <x:WindowHeight>6750 </x:WindowHeight>");strb.Append(" <x:WindowWidth>10620 </x:WindowWidth>");strb.Append(" <x:WindowTopX>480 </x:WindowTopX>");strb.Append(" <x:WindowTopY>75 </x:WindowTopY>");strb.Append(" <x:ProtectStructure>False </x:ProtectStructure>");strb.Append(" <x:ProtectWindows>False </x:ProtectWindows>");strb.Append(" </x:ExcelWorkbook>");strb.Append(" </xml>");strb.Append("");strb.Append(" </head> <body> <table align=\"center\" style=’border-collapse:collapse;table-layout:fixed'> <tr>"); if (ds.Tables.Count > 0){//写列标题 if […]
View Detailsusing System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Data;using System.Data.OleDb;using System.Xml;using System.Xml.Xsl;using System.IO; namespace Amei.Data{ partial class DataSet { #region ExcelHelper #region 读取Excel public System.Data.DataSet ReadExcel(string path) { System.Data.DataSet ds = new System.Data.DataSet(); string extension = System.IO.Path.GetExtension(path.ToLower()); string connString = string.Empty; if (extension == ".xls") { connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=2\""; } else if (extension == ".xlsx") { connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=2\""; } string query = "SELECT * FROM [Sheet1$]"; try { OleDbConnection conn = new OleDbConnection(); OleDbCommand cmd […]
View Detailspublic void repeater1_ItemCreated(object sender, RepeaterItemEventArgs e) { DataRowView row = (DataRowView)e.Item.DataItem; string url = "id="+row["zyid"].ToString(); string text = row["职业名称"].ToString(); string cat_num = row["数量"].ToString(); HyperLink link = new HyperLink(); link.NavigateUrl = "upPage.aspx?" + url; link.Text = text; e.Item.Controls.Add(link); […]
View DetailsPHP被许多程序员用来开发WEB的首选语言。在实际开发中,网站的各项功能都可以通过PHP语言的编写来满足,比如PHP页面跳转这一方法。 探讨PHP变量解析顺序如何获取提交数据 深入解读PHP运行机制 浅析PHP函数extract()应用技巧 为你总结一些PHP信息函数 PHP查询字符串技巧分享 Web系统中,从一个网页跳转到另一个网页,是LAMP项目中最常用的技术之一。页面跳转可能是由于用户单击链接、按钮等引发的,也可能是系统自动产生的。 此处介绍PHP中常用的实现页面自动跳转的方法。 PHP页面跳转一、header()函数 header()函数是PHP中进行页面跳转的一种十分简单的方法。header()函数的主要功能是将HTTP协议标头(header)输出到浏览器。 header()函数的定义如下: void header (string string [,bool replace [,int http_response_code]]) 可选参数replace指明是替换前一条类似标头还是添加一条相同类型的标头,默认为替换。 第二个可选参数http_response_code强制将HTTP相应代码设为指定值。 header函数中Location类型的标头是一种特殊的header调用,常用来实现页面跳转。注意:1.location和“:”号间不能有空格,否则不会跳转。 2.在用header前不能有任何的输出。 3.header后的PHP代码还会被执行。例如,将浏览器重定向到lamp兄弟连官方论坛
1 2 3 4 5 6 7 |
<?php //重定向浏览器 header("Location: http://bbs. lampbrother.net"); //确保重定向后,后续代码不会被执行 exit; ?> |
PHP页面跳转二、Meta标签 Meta标签是HTML中负责提供文档元信息的标签,在PHP程序中使用该标签,也可以实现页面跳转。 若定义http-equiv为refresh,则打开该页面时将根据content规定的值在一定时间内跳转到相应页面。 若设置content="秒数;url=网址",则定义了经过多长时间后页面跳转到指定的网址。例如,使用meta标签实现疫苗后页面自动跳转到LAMP兄弟连官方论坛。
1 |
<meta http-equiv="refresh" content="1;url=http://bbs.lampbrother.net"> |
例如,以下程序meta.php实现在该页面中停留一秒后页面自动跳转到bbs.lampbrother.net。
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php $url="http://bbs.lampbrother.net"; ?> <html> <head> <meta http-equiv="refresh" content="1; url=<?php echo $url; ?>"> </head> <body> 页面只停留一秒…… </body> </html> |
PHP页面跳转三、JavaScript 例如,此代码可以放在程序中的任何合法位置。
1 2 3 4 5 6 |
<?php $url="http://bbs.lampbrother.net"; echo "<script language='javascript' type='text/javascript'>"; echo "window.location.href='$url'"; echo "</script>"; ?> |
以上就是我们向大家介绍的三种PHP页面跳转实现方法。
View DetailsPHP会话Session的御用比起Cookie来说相对要更安全一些,而且没有数据长度的限制。我们今天就向大家介绍有关PHP会话Session一些相关知识,以加深民大家对PHP会话Session的认识程度。 PHP函数header()查询单部件的具体方法解 WordPress获得2009开源PHP项目亚军 PHP数组转字符串与PHP字符串转数组的相关 探讨PHP引用&符号的一些注意问题 PHP数组处理函数概览 由于 Session 是以文本文件形式存储在服务器端的,所以不怕客户端修改 Session 内容。实际上在服务器端的 Session 文件,PHP 自动修改 Session 文件的权限,只保留了系统读和写权限,而且不能通过 ftp 修改,所以安全得多。 对于 Cookie 来说,假设我们要验证用户是否登陆,就必须在 Cookie 中保存用户名和密码(可能是 md5 加密后字符串),并在每次请求页面的时候进行验证。如果用户名和密码存储在数据库,每次都要执行一次数据库查询,给数据库造成多余的负担。因为我们并不能 只做一次验证。为什么呢?因为客户端 Cookie 中的信息是有可能被修改的。假如你存储 $admin 变量来表示用户是否登陆,$admin 为 true 的时候表示登陆,为 false 的时候表示未登录,在第一次通过验证后将 $admin 等于 true 存储在 Cookie,下次就不用验证了,这样对么?错了,假如有人伪造一个值为 true 的 $admin 变量那不是就立即取的了管理权限么?非常的不安全。 而PHP会话Session就不同了,Session 是存储在服务器端的,远程用户没办法修改 Session 文件的内容,因此我们可以单纯存储一个 $admin 变量来判断是否登陆,首次验证通过后设置 $admin 值为 true,以后判断该值是否为 true,假如不是,转入登陆界面,这样就可以减少很多数据库操作了。而且可以减少每次为了验证 Cookie 而传递密码的不安全性了(Session 验证只需要传递一次,假如你没有使用 SSL 安全协议的话)。即使密码进行了 md5 加密,也是很容易被截获的。 当然使用 Session 还有很多优点,比如控制容易,可以按照用户自定义存储等(存储于数据库)。我这里就不多说了。 PHP会话Session在 php.ini 是否需要设置呢?一般不需要的,因为并不是每个人都有修改 php.ini 的权限,默认 Session 的存放路径是服务器的系统临时文件夹,我们可以自定义存放在自己的文件夹里,这个稍后我会介绍。 开始介绍如何创建 Session。非常简单,真的。 启动 Session 会话,并创建一个 $admin 变量:
1 |
<ol class="dp-xml"><li class="alt"><span><span>// 启动 Session </span></span></li><li><span>session_start(); </span></li><li class="alt"><span>// 声明一个名为 admin 的变量,并赋空值。 </span></li><li><span>$_SESSION["admin"] = null; </span></li><li class="alt"><span class="tag"><strong><font color="#006699">?></font></strong></span><span> </span></li></ol> |
如果你使用了 […]
View Details本文将讨论的是WPF与Silverlight的关键区别,希望本文能对大家更好的了解这两者有所帮助。 Silverlight刚诞生时,很多人只是简单的理解它为Flash的竞争对手。但是随着微软的进一步工作,Silverlight的应用范围越来越广泛,甚至很多人将它与WPF混为一谈。本文将为大家细细道来。 当WPF和Silverlight越来越受到.NET开发人员重视的时候,两者间的界限也越来越模糊。回顾六月,Wintellect发布了鲜为人知但极其重要的“微软WPF和Silverlight之异同白皮书”。我们建议GUI开发人员要通读全部69页,我们会列出主要的观点及其对相关业务范围开发人员的影响。 依赖关系属性是两个平台的重要组成部分,使用PropertyMetadata可代替普通字段来保存属性。Silverlight仅提供了该类,而WPF却有若干子类型可用。 UIPropertyMetadata添加了一个标识符,用于决定“在使用了元数据实例的地方,是否应该禁播依赖关系属性的动画” FrameworkPropertyMetadata添加一个标识符来指示影响管道的那些属性,包括控制管理、测量和呈现。它也可用于指示属性是否允许数据绑定以及默认的类型。由于Silverlight不支持该类,因此所有的数据绑定在默认情况下都是单向的。 Silverlight不支持隧道事件。两个平台都支持Direct事件和Bubbling事件。 WPF支持多种类型的触发器。一个简单的触发器附加到依赖关系属性后,当触发器条件满足的时候便会自动修改样式。除了简单触发器以外,WPF也支持可响应路由事件或使用数据绑定的触发器。 Silverlight使用视觉状态管理器代替触发器。WPF当前并不提供该技术,但会在WPF 4.0中添加。 Silverlight仅支持若干标记扩展。除了通用的StaticResource、Binding和TemplateBinding扩展以外,WPF还添加了DynamicResource、RelativeSource、x:Type、x:Static和x:Array。 有很多键盘和鼠标事件仅在WPF中可用。由于为数众多的关系,我们稍后会列出完整列表。 关于UIElement类和IInputElement接口。当某个控件被禁用的时候,WPF使用它们来禁用所有的子控件。Silverlight不提供这种功能,所以开发人员不得不手动遍历控件树。 在通信方面,Silverlight仅限于BasicHttpBinding和PollingDuplexHttpBinding。当然,WPF支持所有的绑定。 最后,打印功能在两者之间也完全不同。WPF可直接打印可视化树而Silverlight则依赖浏览器实现。
View Details想要将值插入到自动编号(或者说是标识列,IDENTITY)中去,需要设定 SET IDENTITY_INSERT 示例: 1.首先建立一个有标识列的表:CREATE TABLE products (id int IDENTITY PRIMARY KEY, product varchar(40)) 2.尝试在表中做以下操作:INSERT INTO products (id, product) VALUES(3, 'garden shovel') 结果会导致错误:“当 IDENTITY_INSERT 设置为 OFF 时,不能向表 'products' 中的标识列插入显式值。” 3.改用:SET IDENTITY_INSERT products ONINSERT INTO products (id, product) VALUES(1, 'garden shovel') 返回正确。 4.建立另外一个表products2,尝试相同插入操作:CREATE TABLE products2 (id int IDENTITY PRIMARY KEY, product varchar(40)) 然后执行:SET IDENTITY_INSERT products2 ONINSERT INTO products2 (id, product) VALUES(1, 'garden shovel') 导致错误:“表 'material.dbo.products' 的 IDENTITY_INSERT 已经为 ON。无法对表 'products2' 执行 SET 操作。” 改为执行:SET IDENTITY_INSERT products OFFSET IDENTITY_INSERT products2 ONINSERT INTO products2 (id, product) VALUES(2, 'garden shovel') 执行通过。 5.尝试以下操作:SET IDENTITY_INSERT […]
View Details一、准备知识点: 1.对文件操作,先引用两个命名空间:using System.IO;(操作文件)、using Sysetem.Text;(操作文本) 2.创建文本文件:(1)创建文件名和文件内容(相当于新建文本文档)(2)创建StreamWriter对象,创建一个某某格式的文件(3)将内容写入数据流WriteLine (4)关闭StreamWrite对象.Close() 方法一:直接创建一个StreamWriter对象 string filename = TextBox1.Text string filecontent= TextBox2.Text StreamWriter sw =File.CreatText(Server.MapPath("~/txt/"+ filename +".txt")); sw.WriteLine(filecontent); sw.Close(); Response.Write("<script>alert('已经成功新建了一个’+ filename +'.txt,并添加了数据')</script>") 方法二:在创建StreamWriter对象之前先创建一个FileStream(文件流)对象,并在最后关闭它。 string filename = TextBox1.Text string filecontent= TextBox2.Text FileStream fs = new FileStream(Server.MapPath("~/txt/"+ filename + ".txt")),FileMode.Create,FileAccess.Write); //文件流fs的路径、文件打开方式:创建和写操作 StreamWriter sw = new StreamWriter(fs,Encoding.Default); //文件流fs和浏览器默认编码类型 sw.WriteLine(filecontent); sw.Close(); fs.Close(); Response.Write("<script>alert('成功新建了一个’+ filename +'.txt,并添加了数据')</script>") 3.读取文本文本: 方法一:直接使用File.ReadAllText(文件路径,编码方式) TextBox1.Text=File.ReadAllText(Server.MapPath("~/txt/**.txt"),Encoding.Default); 方法二:使用StreamReader对象以File.OpenText(文件路径)读取文件数据以及使用StreamBuilder对象的Append属性来添加读取文件的数据(UTF-8规范读取的数据) StreamReader sr = File.OpenText(Server.MapPath("~/txt/**.txt")); StreamBuilder sb = new StreamBuilder(); while(!sr.EndOfStream) //如果数据不到最后一行,继续添加(循环语句) { sb.Append(sr.ReadLine() +"<br>");} sr.Close(); 方法三:使用StreamBuilder对象的Append属性添加从StreamReader对象那里读取的数据流,与前一种方法不同的是,这次用到了FileStream的File.Open方法取代了File.OpenText(文件路径)的方法(GB2312规范读取数据) StreamBuilder sb = new StreamBuilder(); FileStream fs = File.Open(Server.MapPath("~/txt/**.txt"),FileMode.Open,FileAccess.Read); StreamReader sr = new StreamReader(fs,Encoding.Default); […]
View Details