有用的收藏!javascript/c#/asp.net
今天有朋友问我关于用JAVASCRIPT来进行页面各表单之间的数据传递的问题,我以前也写过,不过从来没有注意,今天总结了一下,希望能够给大家一些帮助,也帮助我总结以前学过,用过的知识。
一,最简单的就是同一个网页里的表单的数据传递。
举个实例,一个网页上有两个表单,每个表单里一个文本框,一个按钮。点按钮互相对操作对方的文本框的值。我们举的例子是把一个文本框付给另一个文本框。具体的HTML代码如下:
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
<form name="form1" method="post" action="">
<input type="text" name="textfield">
<input type="button" name="Submit" value="1--------->2" onClick="ok()">
</form>
<form name="form2" method="post" action="">
<input type="text" name="textfield2">
<input type="button" name="Submit" value="2----->1" onClick="ok1()">
</form>
</body>
</html>
以上为HTMl的代码,大家可能注意到了onclik的代码了,有两个函数,接下来就是JAVASCRIPT的代码了:<script language="JavaScript">
function ok()
{
document.form2.textfield2.value=document.form1.textfield.value;
}
function ok1()
{
document.form1.textfield.value=document.form2.textfield2.value;
}
</script>
二,第二种是两个窗口之间的表单的文本框之间数据传递。其实这个可以在原来的基础上进行一些扩展就可以了。关于如何创建弹出窗口,窗体里的表单的代码,在这里就不多说了,现在在这里说一下如何操作父窗口的表单里的文本框的数据。具体代码如下:
<script language="JavaScript">
function ok()
{
opener.document.form2.textfield2.value=document.form1.textfield.value
}
</script>
三,第三种就是框架网页之间的表单的文本框之间数据传递.
注意的地方是框架的写法:
<frameset cols="505,505">
<frame src="test.htm" name="leftr" id="leftr">//定义框架的名称
<frame src="test2.htm" id="right" name="right">
</frameset>
<noframes><body>
</body></noframes>
具体的实现代码如下:
<script language="JavaScript">
function ok()
{
parent.leftr.document.form2.textfield2.value=document.form1.textfield.value
}
</script>
这三种窗口之间的文本框数值互相操作的简单方法就实现了,其它需要注意的就是他们之间的关系。
其实很简单的,现丑了,希望大家互相交流,QQ:171476439,
作者Blog:http://blog.csdn.net/itfly/
|
固定链接
http://fx0418.spaces.live.com/blog/cns!47A4D68978560739!214.entry
添加评论
55种网页常用小技巧(javascript)
55种网页常用小技巧(javascript)
1. oncontextmenu="window.event.returnValue=false" 将彻底屏蔽鼠标右键
<table border oncontextmenu=return(false)><td>no</table> 可用于Table
2. <body onselectstart="return false"> 取消选取、防止复制
3. onpaste="return false" 不准粘贴
4. oncopy="return false;" oncut="return false;" 防止复制
5. <link rel="Shortcut Icon" href="favicon.ico"> IE地址栏前换成自己的图标
6. <link rel="Bookmark" href="favicon.ico"> 可以在收藏夹中显示出你的图标
7. <input style="ime-mode:disabled"> 关闭输入法
8. 永远都会带着框架
<script language="JavaScript"><!--
if (window == top)top.location.href = "frames.htm"; //frames.htm为框架网页
// --></script>
9. 防止被人frame
<SCRIPT LANGUAGE=JAVASCRIPT><!--
if (top.location != self.location)top.location=self.location;
// --></SCRIPT>
10. 网页将不能被另存为
<noscript><iframe src=*.html></iframe></noscript>
11. <input type=button value=查看网页源代码
onclick="window.location = "view-source:"+ "http://www.pconline.com.cn"">
12.删除时确认
<a href="javascript:if(confirm("确实要删除吗?"))location="boos.asp?&areyou=删除&page=1"">删除</a>
13. 取得控件的绝对位置
//Javascript
<script language="Javascript">
function getIE(e){
var t=e.offsetTop;
var l=e.offsetLeft;
while(e=e.offsetParent){
t+=e.offsetTop;
l+=e.offsetLeft;
}
alert("top="+t+"/nleft="+l);
}
</script>
//VBScript
<script language="VBScript"><!--
function getIE()
dim t,l,a,b
set a=document.all.img1
t=document.all.img1.offsetTop
l=document.all.img1.offsetLeft
while a.tagName<>"BODY"
set a = a.offsetParent
t=t+a.offsetTop
l=l+a.offsetLeft
wend
msgbox "top="&t&chr(13)&"left="&l,64,"得到控件的位置"
end function
--></script>
14. 光标是停在文本框文字的最后
<script language="javascript">
function cc()
{
var e = event.srcElement;
var r =e.createTextRange();
r.moveStart("character",e.value.length);
r.collapse(true);
r.select();
}
</script>
<input type=text name=text1 value="123" onfocus="cc()">
15. 判断上一页的来源
javascript:
document.referrer
16. 最小化、最大化、关闭窗口
<object id=hh1 classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11">
<param name="Command" value="Minimize"></object>
<object id=hh2 classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11">
<param name="Command" value="Maximize"></object>
<OBJECT id=hh3 classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11">
<PARAM NAME="Command" VALUE="Close"></OBJECT>
<input type=button value=最小化 onclick=hh1.Click()>
<input type=button value=最大化 onclick=hh2.Click()>
<input type=button value=关闭 onclick=hh3.Click()>
本例适用于IE
17.屏蔽功能键Shift,Alt,Ctrl
<script>
function look(){
if(event.shiftKey)
alert("禁止按Shift键!"); //可以换成ALT CTRL
}
document.onkeydown=look;
</script>
18. 网页不会被缓存
<META HTTP-EQUIV="pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate">
<META HTTP-EQUIV="expires" CONTENT="Wed, 26 Feb 1997 08:21:57 GMT">
或者<META HTTP-EQUIV="expires" CONTENT="0">
19.怎样让表单没有凹凸感?
<input type=text style="border:1 solid #000000">
或
<input type=text style="border-left:none; border-right:none; border-top:none; border-bottom:
1 solid #000000"></textarea>
20.<div><span>&<layer>的区别?
<div>(division)用来定义大段的页面元素,会产生转行
<span>用来定义同一行内的元素,跟<div>的唯一区别是不产生转行
<layer>是ns的标记,ie不支持,相当于<div>
21.让弹出窗口总是在最上面:
<body onblur="this.focus();">
22.不要滚动条?
让竖条没有:
<body style="overflow:scroll;overflow-y:hidden">
</body>
让横条没有:
<body style="overflow:scroll;overflow-x:hidden">
</body>
两个都去掉?更简单了
<body scroll="no">
</body>
23.怎样去掉图片链接点击后,图片周围的虚线?
<a href="#" onFocus="this.blur()"><img src="logo.jpg" border=0></a>
24.电子邮件处理提交表单
<form name="form1" method="post" action="mailto:****@***.com" enctype="text/plain">
<input type=submit>
</form>
25.在打开的子窗口刷新父窗口的代码里如何写?
window.opener.location.reload()
26.如何设定打开页面的大小
<body onload="top.resizeTo(300,200);">
打开页面的位置<body onload="top.moveBy(300,200);">
27.在页面中如何加入不是满铺的背景图片,拉动页面时背景图不动
<STYLE>
body
{background-image:url(logo.gif); background-repeat:no-repeat;
background-position:center;background-attachment: fixed}
</STYLE>
28. 检查一段字符串是否全由数字组成
<script language="Javascript"><!--
function checkNum(str){return str.match(//D/)==null}
alert(checkNum("1232142141"))
alert(checkNum("123214214a1"))
// --></script>
29. 获得一个窗口的大小
document.body.clientWidth; document.body.clientHeight
30. 怎么判断是否是字符
if (/[^/x00-/xff]/g.test(s)) alert("含有汉字");
else alert("全是字符");
31.TEXTAREA自适应文字行数的多少
<textarea rows=1 name=s1 cols=27 onpropertychange="this.style.posHeight=this.scrollHeight">
</textarea>
32. 日期减去天数等于第二个日期
<script language=Javascript>
function cc(dd,dadd)
{
//可以加上错误处理
var a = new Date(dd)
a = a.valueOf()
a = a - dadd * 24 * 60 * 60 * 1000
a = new Date(a)
alert(a.getFullYear() + "年" + (a.getMonth() + 1) + "月" + a.getDate() + "日")
}
cc("12/23/2002",2)
</script>
33. 选择了哪一个Radio
<HTML><script language="vbscript">
function checkme()
for each ob in radio1
if ob.checked then
window.alert ob.value
next
end function
</script><BODY>
<INPUT name="radio1" type="radio" value="style" checked>Style
<INPUT name="radio1" type="radio" value="barcode">Barcode
<INPUT type="button" value="check" onclick="checkme()">
</BODY></HTML>
34.脚本永不出错
<SCRIPT LANGUAGE="JavaScript">
<!-- Hide
function killErrors() {
return true;
}
window.onerror = killErrors;
// -->
</SCRIPT>
35.ENTER键可以让光标移到下一个输入框
<input onkeydown="if(event.keyCode==13)event.keyCode=9">
36. 检测某个网站的链接速度:
把如下代码加入<body>区域中:
<script language=Javascript>
tim=1
setInterval("tim++",100)
b=1
var autourl=new Array()
autourl[1]="www.njcatv.net"
autourl[2]="javacool.3322.net"
autourl[3]="www.sina.com.cn"
autourl[4]="www.nuaa.edu.cn"
autourl[5]="www.cctv.com"
function butt(){
document.write("<form name=autof>")
for(var i=1;i<autourl.length;i++)
document.write("<input type=text name=txt"+i+" size=10 value=测试中……> =》<input type=text
name=url"+i+" size=40> =》<input type=button value=GO
onclick=window.open(this.form.url"+i+".value)><br>")
document.write("<input type=submit value=刷新></form>")
}
butt()
function auto(url){
document.forms[0]["url"+b].value=url
if(tim>200)
{document.forms[0]["txt"+b].value="链接超时"}
else
{document.forms[0]["txt"+b].value="时间"+tim/10+"秒"}
b++
}
function run(){for(var i=1;i<autourl.length;i++)document.write("<img src=http://"+autourl+"/"+Math.random()+" width=1 height=1
onerror=auto("http://"+autourl+"")>")}
run()</script>
37. 各种样式的光标
auto :标准光标
default :标准箭头
hand :手形光标
wait :等待光标
text :I形光标
vertical-text :水平I形光标
no-drop :不可拖动光标
not-allowed :无效光标
help :?帮助光标
all-scroll :三角方向标
move :移动标
crosshair :十字标
e-resize
n-resize
nw-resize
w-resize
s-resize
se-resize
sw-resize
38.页面进入和退出的特效
进入页面<meta http-equiv="Page-Enter" content="revealTrans(duration=x, transition=y)">
推出页面<meta http-equiv="Page-Exit" content="revealTrans(duration=x, transition=y)">
这个是页面被载入和调出时的一些特效。duration表示特效的持续时间,以秒为单位。transition表示使用哪种特效,取值为1-23:
0 矩形缩小
1 矩形扩大
2 圆形缩小
3 圆形扩大
4 下到上刷新
5 上到下刷新
6 左到右刷新
7 右到左刷新
8 竖百叶窗
9 横百叶窗
10 错位横百叶窗
11 错位竖百叶窗
12 点扩散
13 左右到中间刷新
14 中间到左右刷新
15 中间到上下
16 上下到中间
17 右下到左上
18 右上到左下
19 左上到右下
20 左下到右上
21 横条
22 竖条
23 以上22种随机选择一种
39.在规定时间内跳转
<META http-equiv=V="REFRESH" content="5;URL=http://www.51js.com">
40.网页是否被检索
<meta name="ROBOTS" content="属性值">
其中属性值有以下一些:
属性值为"all": 文件将被检索,且页上链接可被查询;
属性值为"none": 文件不被检索,而且不查询页上的链接;
属性值为"index": 文件将被检索;
属性值为"follow": 查询页上的链接;
属性值为"noindex": 文件不检索,但可被查询链接;
属性值为"nofollow": 文件不被检索,但可查询页上的链接。
41、email地址的分割
把如下代码加入<body>区域中
<a href="mailto:webmaster@sina.com">webmaster@sina.com</a>
42、流动边框效果的表格
把如下代码加入<body>区域中
<SCRIPT>
l=Array(6,7,8,9,'a','b','b','c','d','e','f')
Nx=5;Ny=35
t="<table border=0 cellspacing=0 cellpadding=0 height="+((Nx+2)*16)+"><tr>"
for(x=Nx;x<Nx+Ny;x++)
t+="<td width=16 id=a_mo"+x+"> </td>"
t+="</tr><tr><td width=10 id=a_mo"+(Nx-1)+"> </td><td colspan="+(Ny-2)+" rowspan="+(Nx)+"> </td><td width=16 id=a_mo"+(Nx+Ny)+"></td></tr>"
for(x=2;x<=Nx;x++)
t+="<tr><td width=16 id=a_mo"+(Nx-x)+"> </td><td width=16 id=a_mo"+(Ny+Nx+x-1)+"> </td></tr>"
t+="<tr>"
for(x=Ny;x>0;x--)
t+="<td width=16 id=a_mo"+(x+Nx*2+Ny-1)+"> </td>"
document.write(t+"</tr></table>")
var N=Nx*2+Ny*2
function f1(y){
for(i=0;i<N;i++){
c=(i+y)%20;if(c>10)c=20-c
document.all["a_mo"+(i)].bgColor="'#0000"+l[c]+l[c]+"'"}
y++
setTimeout('f1('+y+')','1')}
f1(1)
</SCRIPT>
43、JavaScript主页弹出窗口技巧
窗口中间弹出
<script>
window.open("http://www.cctv.com","","width=400,height=240,top="+(screen.availHeight-240)/2+",left="+(screen.availWidth-400)/2);
</script>
============
<html>
<head>
<script language="LiveScript">
function WinOpen() {
msg=open("","DisplayWindow","toolbar=no,directories=no,menubar=no");
msg.document.write("<HEAD><TITLE>哈 罗!</TITLE></HEAD>");
msg.document.write("<CENTER><H1>酷 毙 了!</H1><h2>这 是<B>JavaScript</B>所开 的 视 窗!</h2></CENTER>");
}
</script>
</head>
<body>
<form>
<input type="button" name="Button1" value="Push me" onclick="WinOpen()">
</form>
</body>
</html>
==============
一、在下面的代码中,你只要单击打开一个窗口,即可链接到赛迪网。而当你想关闭时,只要单击一下即可关闭刚才打开的窗口。
代码如下:
<SCRIPT language="JavaScript">
<!--
function openclk() {
another=open('http://www.ccidnet.com','NewWindow');
}
function closeclk() {
another.close();
}
//-->
</SCRIPT>
<FORM>
<INPUT TYPE="BUTTON" NAME="open" value="打开一个窗口" onClick="openclk()">
<BR>
<INPUT TYPE="BUTTON" NAME="close" value="关闭这个窗口" onClick="closeclk()">
</FORM>
二、上面的代码也太静了,为何不来点动感呢?如果能给页面来个降落效果那该多好啊!
代码如下:
<script>
function drop(n) {
if(self.moveBy){
self.moveBy (0,-900);
for(i = n; i > 0; i--){
self.moveBy(0,3);
}
for(j = 8; j > 0; j--){
self.moveBy(0,j);
self.moveBy(j,0);
self.moveBy(0,-j);
self.moveBy(-j,0);
}
}
}
</script>
<body onLoad="drop(300)">
三、讨厌很多网站总是按照默认窗口打开,如果你能随心所欲控制打开的窗口那该多好。
代码如下:
<SCRIPT LANGUAGE="JavaScript">
<!-- Begin
function popupPage(l, t, w, h) {
var windowprops = "location=no,scrollbars=no,menubars=no,toolbars=no,resizable=yes" +
",left=" + l + ",top=" + t + ",width=" + w + ",height=" + h;
var URL = "http://www.80cn.com";
popup = window.open(URL,"MenuPopup",windowprops);
}
// End -->
</script>
<table>
<tr>
<td>
<form name=popupform>
<pre>
打开页面的参数<br>
离开左边的距离: <input type=text name=left size=2 maxlength=4> pixels
离开右边的距离: <input type=text name=top size=2 maxlength=4> pixels
窗口的宽度: <input type=text name=width size=2 maxlength=4> pixels
窗口的高度: <input type=text name=height size=2 maxlength=4> pixels
</pre>
<center>
<input type=button value="打开这个窗口!" onClick="popupPage(this.form.left.value, this.form.top.value, this.form.width.value, this.form.height.value)">
</center>
</form>
</td>
</tr>
</table>你只要在相对应的对话框中输入一个数值即可,将要打开的页面的窗口控制得很好。
44、页面的打开移动
把如下代码加入<body>区域中
<SCRIPT LANGUAGE="JavaScript">
<!-- Begin
for (t = 2; t > 0; t--) {
for (x = 20; x > 0; x--) {
for (y = 10; y > 0; y--) {
parent.moveBy(0,-x);
}
}
for (x = 20; x > 0; x--) {
for (y = 10; y > 0; y--) {
parent.moveBy(0,x);
}
}
for (x = 20; x > 0; x--) {
for (y = 10; y > 0; y--) {
parent.moveBy(x,0);
}
}
for (x = 20; x > 0; x--) {
for (y = 10; y > 0; y--) {
parent.moveBy(-x,0);
}
}
}
//-->
// End -->
</script>
45、显示个人客户端机器的日期和时间
<script language="LiveScript">
<!-- Hiding
today = new Date()
document.write("现 在 时 间 是: ",today.getHours(),":",today.getMinutes())
document.write("<br>今 天 日 期 为: ", today.getMonth()+1,"/",today.getDate(),"/",today.getYear());
// end hiding contents -->
</script>
46、自动的为你每次产生最後修改的日期了:
<html>
<body>
This is a simple HTML- page.
<br>
Last changes:
<script language="LiveScript">
<!-- hide script from old browsers
document.write(document.lastModified)
// end hiding contents -->
</script>
</body>
</html>
47、不能为空和邮件地址的约束:
<html>
<head>
<script language="JavaScript">
<!-- Hide
function test1(form) {
if (form.text1.value == "")
alert("您 没 写 上 任 何 东 西, 请 再 输 入 一 次 !")
else {
alert("嗨 "+form.text1.value+"! 您 已 输 入 完 成 !");
}
}
function test2(form) {
if (form.text2.value == "" ||
form.text2.value.indexOf('@', 0) == -1)
alert("这 不 是 正 确 的 e-mail address! 请 再 输 入 一 次 !");
else alert("您 已 输 入 完 成 !");
}
// -->
</script>
</head>
<body>
<form name="first">
Enter your name:<br>
<input type="text" name="text1">
<input type="button" name="button1" value="输入 测 试" onClick="test1(this.form)">
<P>
Enter your e-mail address:<br>
<input type="text" name="text2">
<input type="button" name="button2" value="输入 测 试" onClick="test2(this.form)">
</body>
48、跑马灯
<html>
<head>
<script language="JavaScript">
<!-- Hide
var scrtxt="怎麽样 ! 很酷吧 ! 您也可以试试."+"Here goes your message the visitors to your page will "+"look at for hours in pure fascination...";
var lentxt=scrtxt.length;
var width=100;
var pos=1-width;
function scroll() {
pos++;
var scroller="";
if (pos==lentxt) {
pos=1-width;
}
if (pos<0) {
for (var i=1; i<=Math.abs(pos); i++) {
scroller=scroller+" ";}
scroller=scroller+scrtxt.substring(0,width-i+1);
}
else {
scroller=scroller+scrtxt.substring(pos,width+pos);
}
window.status = scroller;
setTimeout("scroll()",150);
}
//-->
</script>
</head>
<body onLoad="scroll();return true;">
这里可显示您的网页 !
</body>
</html>
49、在网页中用按钮来控制前页,后页和主页的显示。
<html>
<body>
<FORM NAME="buttonbar">
<INPUT TYPE="button" VALUE="Back" onClick="history.back()">
<INPUT TYPE="button" VALUE="JS- Home" onClick="location='script.html'">
<INPUT TYPE="button" VALUE="Next" onCLick="history.forward()">
</FORM>
</body>
</html>
50、查看某网址的源代码
把如下代码加入<body>区域中
<SCRIPT>
function add()
{
var ress=document.forms[0].luxiaoqing.value
window.location="view-source:"+ress;
}
</SCRIPT>
输入要查看源代码的URL地址:
<FORM><input type="text" name="luxiaoqing" size=40 value="http://"></FORM>
<FORM><br>
<INPUT type="button" value="查看源代码" onClick=add()>
</FORM>
51、title显示日期
把如下代码加入<body>区域中:
<script language="JavaScript1.2">
<!--hide
var isnMonth = new
Array("1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月");
var isnDay = new
Array("星期日","星期一","星期二","星期三","星期四","星期五","星期六","星期日");
today = new Date () ;
Year=today.getYear();
Date=today.getDate();
if (document.all)
document.title="今天是: "+Year+"年"+isnMonth[today.getMonth()]+Date+"日"+isnDay[today.getDay()]
//--hide-->
</script>
52、显示所有链接
把如下代码加入<body>区域中
<script language="JavaScript1.2">
<!--
function extractlinks(){
var links=document.all.tags("A")
var total=links.length
var win2=window.open("","","menubar,scrollbars,toolbar")
win2.document.write("<font size='2'>一共有"+total+"个连接</font><br>")
for (i=0;i<total;i++){
win2.document.write("<font size='2'>"+links[i].outerHTML+"</font><br>")
}
}
//-->
</script>
<input type="button" onClick="extractlinks()" value="显示所有的连接">
53、回车键换行
把如下代码加入<body>区域中
<script type="text/javascript">
function handleEnter (field, event) {
var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
if (keyCode == 13) {
var i;
for (i = 0; i < field.form.elements.length; i++)
if (field == field.form.elements[i])
break;
i = (i + 1) % field.form.elements.length;
field.form.elements[i].focus();
return false;
}
else
return true;
}
</script>
<form>
<input type="text" onkeypress="return handleEnter(this, event)"><br>
<input type="text" onkeypress="return handleEnter(this, event)"><br>
<textarea>回车换行
54、确认后提交
把如下代码加入<body>区域中
<SCRIPT LANGUAGE="JavaScript">
<!--
function msg(){
if (confirm("你确认要提交嘛!"))
document.lnman.submit()
}
//-->
</SCRIPT>
<form name="lnman" method="post" action="">
<p>
<input type="text" name="textfield" value="确认后提交">
</p>
<p>
<input type="button" name="Submit" value="提交" onclick="msg();">
</p>
</form>
55、改变表格的内容
把如下代码加入<body>区域中
<script language=javascript>
var arr=new Array()
arr[0]="一一一一一";
arr[1]="二二二二二";
arr[2]="三三三三三";
</script>
<select onchange="zz.cells[this.selectedIndex].innerHTML=arr[this.selectedIndex]">
<option value=a>改变第一格</option>
<option value=a>改变第二格</option>
<option value=a>改变第三格</option>
</select>
<table id=zz border=1>
<tr height=20>
<td width=150>第一格</td>
<td width=150>第二格</td>
<td width=150>第三格</td>
</tr>
</table>
|
固定链接
http://fx0418.spaces.live.com/blog/cns!47A4D68978560739!213.entry
添加评论
6月7日
用ASP.NET/C#连接Access和SQL Server数据库
连接Access
首先看一个例子代码片断:
程序代码:
--------------------------------------------------------------------------------
using System.Data;
using System.Data.OleDb;
......
string strConnection="Provider=Microsoft.Jet.OleDb.4.0;";
strConnection+=@"Data Source=C:\BegASPNET\Northwind.mdb";
OleDbConnection objConnection=new OleDbConnection(strConnection);
......
objConnection.Open();
objConnection.Close();
......
--------------------------------------------------------------------------------
解释:
连接Access数据库需要导入额外的命名空间,所以有了最前面的两条using命令,这是必不可少的!
strConnection这个变量里存放的是连接数据库所需要的连接字符串,他指定了要使用的数据提供者和要使用的数据源.
"Provider=Microsoft.Jet.OleDb.4.0;"是指数据提供者,这里使用的是Microsoft Jet引擎,也就是Access中的数据引擎,asp.net就是靠这个和Access的数据库连接的.
"Data Source=C:\BegASPNET\Northwind.mdb"是指明数据源的位置,他的标准形式是"Data Source=MyDrive:MyPath\MyFile.MDB".
ps:
1."+="后面的"@"符号是防止将后面字符串中的"\"解析为转义字符.
2.如果要连接的数据库文件和当前文件在同一个目录下,还可以使用如下的方法连接:
strConnection+="Data Source=";
strConnection+=MapPath("Northwind.mdb");
这样就可以省得你写一大堆东西了!
3.要注意连接字符串中的参数之间要用分号来分隔.
"OleDbConnection objConnection=new OleDbConnection(strConnection);"这一句是利用定义好的连接字符串来建立了一个链接对象,以后对数据库的操作我们都要和这个对象打交道.
"objConnection.Open();"这用来打开连接.至此,与Access数据库的连接完成.其余操作(插入,删除...)请参阅相关书籍
连接SQL Server
例子代码片断:
程序代码:
--------------------------------------------------------------------------------
using System.Data;
using System.Data.SqlClient;
...
string strConnection="user id=sa;password=;";
strConnection+="initial catalog=Northwind;Server=YourSQLServer;";
strConnection+="Connect Timeout=30";
SqlConnection objConnection=new SqlConnection(strConnection);
...
objConnection.Open();
objConnection.Close();
...
--------------------------------------------------------------------------------
解释:
连接SQL Server数据库的机制与连接Access的机制没有什么太大的区别,只是改变了Connection对象和连接字符串中的不同参数.
首先,连接SQL Server使用的命名空间不是"System.Data.OleDb",而是"System.Data.SqlClient".
其次就是他的连接字符串了,我们一个一个参数来介绍(注意:参数间用分号分隔):
"user id=sa":连接数据库的验证用户名为sa.他还有一个别名"uid",所以这句我们还可以写成"uid=sa".
"password=":连接数据库的验证密码为空.他的别名为"pwd",所以我们可以写为"pwd=".
这里注意,你的SQL Server必须已经设置了需要用户名和密码来登录,否则不能用这样的方式来登录.如果你的SQL Server设置为Windows登录,那么在这里就不需要使用"user id"和"password"这样的方式来登录,而需要使用"Trusted_Connection=SSPI"来进行登录.
"initial catalog=Northwind":使用的数据源为"Northwind"这个数据库.他的别名为"Database",本句可以写成"Database=Northwind".
"Server=YourSQLServer":使用名为"YourSQLServer"的服务器.他的别名为"Data Source","Address","Addr".如果使用的是本地数据库且定义了实例名,则可以写为"Server=(local)\实例名";如果是远程服务器,则将"(local)"替换为远程服务器的名称或IP地址.
"Connect Timeout=30":连接超时时间为30秒.
在这里,建立连接对象用的构造函数为:SqlConnection.
其余的就和Access没有什么区别了!
|
- 16:12
- 添加评论
- 固定链接
- 引用通告 (0)
- 记录它
- asp.net 基础
固定链接
http://fx0418.spaces.live.com/blog/cns!47A4D68978560739!212.entry
添加评论
在ASP.NET中面向对象的编程思想
首先,我们还是来谈一下面向对象的编程思想吧。我想现在的主流编程思想无非两种:结构与面向对象。以前,在ASP中我们完全采用的是结构化思想。现在,asp.net可以完全支持面向对象的编程思想,这不得不说是一个质上的飞跃。
记得我在大约半年前给大家写过一篇<<面向对象从人造地球谈起>>,当时是由于看到一本小说的启发,发现任何东西都可以用面向对象的思想来看。我现在还是简单谈一下吧,面向对象无非就是把世间万物当做一个类,要想使用类做事,就必须创建类的实例。这很好理简,比方人是一个类,我们总不能说叫人去做事吧(这样没有针对性),我们往往说叫张三 or 李四去,这张三 or 李四就是人这个类的一个实例。这就是对象的概念。再讲一下就是事件与动作,举个例子:起风了,下雨了,收衣服了。起风了,下雨了是事件,这个事件会激发收衣服这个动作,这个动作的执行者就是对象。如果大家学过SQL Server的触发器,我想对这一点思想会更清楚。面向对象还比较重要的就是继承(Inherits)与多态。这很好理解,比方,张三会收衣服,张三生的儿子继承了张三的特点,也会收衣服,这就是继承,而且说不定张三的儿子还会开车,这就是多态。
好了,对于面向对象理解我就说这么一点,还是说一下在asp.net中如何用面向对象的观点来编程吧。我们在编web程序时,通常要要处理:UI(用户界面,也就是数据的显示)与代码(如何处理数据的Code(代码)。为了达到UI与Code的完全分开,我们把UI当作一个对象,Code当作另我一个对象。当然我们要研究这两个对象的关系,还记得我们在编ASP程序时把同一段代码Copy到很多页面,看来code是父类了,UI是子类了。不过他们都是从 System.Web.UI.Page继承过来。理清了类的关系,我们不难理解代码UI与Code分开的思想了。
关系图:
引入名称空间:using System.Web.UI
父类 page→ 很多子类Code(*.cs文件)→很多子子类 UI(*.aspx文件)
因为我主要是想大家了解这种编程思想,所以我只举一个简单的例子,我想大家有了思想,再就是多找实例来看了。
文件两个:
UI类: default.aspx 主要用来显示数据,用天DataGrid控件
Code类: default.aspx.cs 主要用来建立数据联接、查询、绑定数据于DataGrid控件的
里面我创建了自己的namespace名叫vagrant,以及类MyVagrant
数据库: data,里面有一个关系表student
为了说明default.aspx类是从default.aspx.cs 继承过来的,需要在default.aspx申明:
<%@ Page language="c#" Codebehind="default.aspx.cs" Inherits="vagrant.MyVagrant" %>
Codebehind表明父类的源文件,Inherits="vagrant.MyVagrant" 表明该文件是从哪个类继承下来的。
现在给出源文件
default.aspx代码:
<%@ Page language="c#" Codebehind="default.aspx.cs" Inherits="vagrant.MyVagrant" %>
<HTML>
<HEAD>
</HEAD>
<body>
<form id="Form1" method="post" runat="server">
<asp:datagrid id="MyDataGrid" runat="server"
style="Z-INDEX: 101; LEFT: 197px; POSITION: absolute; TOP: 48px"
BorderStyle="Ridge" GridLines="None" BorderWidth="2px" BorderColor="White"
BackColor="White" CellPadding="3" CellSpacing="1" Width="494px" Height="143px">
<HeaderStyle Font-Bold="True" HorizontalAlign="Center" ForeColor="#E7E7FF" VerticalAlign="Middle" BackColor="4A3C8C" />
<ItemStyle HorizontalAlign="Center" ForeColor="Black" VerticalAlign="Middle" BackColor="#DEDFDE" />
</asp:datagrid>
</form>
</body>
</HTML>
default.aspx.cs 文件代码 注意:需要编译
/*
功能说明:default.aspx.cs用来将UI与源代码分开,此为代码部分,需要编译
Created By vagrant
2001.10.17
个人主页:http://www.weavedream.net
*/
//引入必须的名称空间
using System;
using System.Data;
using System.Data.SqlClient; //引入使用SQL数据库所必须的名称空间
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
namespace vagrant //创建自己的名称空间
{
public class MyVagrant :Page //我的类MyVagrant是从类System.Web.UI.Page类继承过来的
{
protected DataGrid MyDataGrid;
private void Page_Load(object sender, System.EventArgs e)//页面装载初始化,可检查页面是不是第一次被处理
{
// 第一步:建立数据库联接,用面向对象的观点就是创建一个SQL数据库联接对象的实例,并初始化
SqlConnection MyConnection=new SqlConnection("Server=(local);DataBase=data;UID=sa;PWD=;");
//第二步:读取数据库,来面向对象的观点就是创建一个查询对象的实例,并初始化
SqlDataAdapter MyCommand=new SqlDataAdapter("select * from student",MyConnection);
//:第三步:存储数据
DataSet ds=new DataSet();
MyCommand.Fill (ds,"vagrant");
// 第四步:绑定数据
MyDataGrid.DataSource =ds.Tables ["vagrant"].DefaultView
MyDataGrid.DataBind ();
}
}
}
|
- 7:06
- 添加评论
- 固定链接
- 引用通告 (0)
- 记录它
- asp.net 基础
固定链接
http://fx0418.spaces.live.com/blog/cns!47A4D68978560739!211.entry
添加评论
6月6日
asp.net开发web项目-vss集成环境配置
首先,vss必须要6.0c以上版本才能在.net环境中使用,
在.net2003安装盘中有6.0d版,6张盘的版本中没有.
vss的安装
服务器端:
找到安装文件,运行setup程序,一路next,超简单,不用解释了吧.
客户端:
在服务器上找到vss的安装目录,其中有个vss子目录,里面包含有netsetup.exe,
把vss目录共享出来,记住一定要共享vss目录,如果共享上级目录,是无法网络安装的,
然后在客户机上打开服务器上的vss共享目录,运行netsetup.exe,so简单,不说了.
vss的配置
在服务器上建个目录,如PROJECT,作为vss数据库根目录,为每个项目建个子目录,
以使每个项目的数据库互不干扰,最近正做一个网站项目,以此为例.
假设这是一个学习网站,在PROJECT目录下建一Study子目录,
在服务器上建一个用户组Developer,把所有此项目的开发人员,kevin,owen加入到此组中,
Study子目录-共享权限-赋予Developer组写的权限.
服务器上,启动Visual SourceSafe 6.0 Admin,点击下拉菜单Tools中的Create Database...菜单项,
点击browse,选择上面创建的Study子目录,在此创建项目数据库,
点击下拉菜单Users/Open SourceSafe Database...,然后选择数据库Study,打开它,
点击下拉菜单Users/Add User...,添加用户kevin,owen,设置好密码,
到此,vss的配置完成.
.net开发环境配置
启动vs.net,新建web项目,http://localhost/Study
在右边的解决方案管理器中右击项目名称Study,点击将解决方案添加到源代码管理,
选择上面建立的Study数据库,用admin登录,默认会给出一个目录名,直接点击ok完成添加,
有必要说明的是,.net项目的默认路径为/我的文档/Visual Studio Projects/
但当把项目加入到vss数据库中后,这个位置的文件都无效了,
那么我们所要操作的文件都在哪呢,总不可能直接操作vss数据库吧,
打开iis管理器,选择Study虚拟目录的属性,查看虚拟路径选项,
可以看到项目Study的本地路径为c:\inetpub\wwwroot\Study
这就是项目Study的本地副本,任何在vs中创建,修改的文件都在这个目录下,
为了操作方便,你可以把这个目录移动到你需要的地方,
或者在建立项目前在iis中建立好Study项目的虚拟目录.
还有一点需要注意,
打开iss管理器-查看Study的属性-目录安全性-身份验证和访问控制-编辑,
可以看到默认使用的是启用匿名访问,把勾点掉,把下面集成windows身份验证勾上。
|
- 8:44
- 添加评论
- 固定链接
- 引用通告 (0)
- 记录它
- asp.net 基础
固定链接
http://fx0418.spaces.live.com/blog/cns!47A4D68978560739!201.entry
添加评论
6月3日
♡♡♡留言本♡♡♡
♡♡♡.。.ღ☀ ❤ღ・。.朋友请您在这里留下您的信息吧.。.ღ☀ ❤ღ・。.♡♡♡
|
固定链接
http://fx0418.spaces.live.com/blog/cns!47A4D68978560739!195.entry
添加评论
6月1日
εїзCute符号分享︷✿
εїзCute符号分享︷✿
╭❤╯╰❤╮•ิ.•ั。◕‿◕。♨*.:。εїз*゚¨゚゚・✿.。.:*・·°⊰⊹ ❀●•۰.-~*'¨¯¨'*·~-. o(‧""‧)o☆..·°♡ o┽┊﹎.εїз︷✿‧:﹎。❤‧:❉:‧ .。.:*・❀●•♪.。‧:❉:‧ ミ●﹏☉ミ*∩_∩*ⓛⓞⓥⓔ ╬∴☀♫♬♩♭♪☆∷﹌★◎▶☺☻►◄♨◐◑↔↕↘☼░ ▒ ♦ ◊ ◦ ♠ ♣ ▣ ▤ ▥▦▩◈♥♡☎✎✟❤➹❀✏ஓ☂✖® ஐ ✲ ღ ☃❆£ ∆ Š Õ╠ ╣Ő ő ∞ ≈ © ‡ † Ž ஜ ஒ ண இ ஆ ௰ ௫(◡‿◡✿) з☠ ๑۩۞
|
固定链接
http://fx0418.spaces.live.com/blog/cns!47A4D68978560739!191.entry
添加评论
请问在asp.net中如何调用菜单上的打印命令
http://www.meadroid.com/scriptx/docs/printdoc.htm?static
<OBJECT id=WebBrowser classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 height=0 width=0></OBJECT><div id=t>
<input type=button value=打印 onclick=document.all.WebBrowser.ExecWB(6,1)>
<input type=button value=直接打印 onclick=document.all.WebBrowser.ExecWB(6,6)>
<input type=button value=页面设置 onclick=document.all.WebBrowser.ExecWB(8,1)>
<input type=button value=打印预览 onclick=t.style.display='none';document.all.WebBrowser.ExecWB(7,1);t.style.display='block';></div>
|
固定链接
http://fx0418.spaces.live.com/blog/cns!47A4D68978560739!158.entry
添加评论
请问在asp.net中如何调用菜单上的打印命令
http://www.meadroid.com/scriptx/docs/printdoc.htm?static
<OBJECT id=WebBrowser classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 height=0 width=0></OBJECT><div id=t>
<input type=button value=打印 onclick=document.all.WebBrowser.ExecWB(6,1)>
<input type=button value=直接打印 onclick=document.all.WebBrowser.ExecWB(6,6)>
<input type=button value=页面设置 onclick=document.all.WebBrowser.ExecWB(8,1)>
<input type=button value=打印预览 onclick=t.style.display='none';document.all.WebBrowser.ExecWB(7,1);t.style.display='block';></div>
|
- 4:07
- 添加评论
- 固定链接
- 引用通告 (0)
- 记录它
- asp.net 示例
固定链接
http://fx0418.spaces.live.com/blog/cns!47A4D68978560739!157.entry
添加评论
在ASP.NET页面中使用SolpartMenu控件
微软为ASP.NET提供了大量的可以免费使用的控件,包括常用的表单验证控件、日历控件等。但微软似乎忘记了另外一个非常有用的控件,那就是菜单控件。的确,在网页中适当地使用菜单,不仅可以降低版面布局的工作
量,而且为日后栏目的扩充留有充分的余地。网上虽然也有不少用JavaScript脚本开发的菜单源代码,但它们并不能“即拿即用”,必须针对实际情况进行二次开发,工作量大且不说,能否适用也还是个未知数,更别提以后的维护与扩充了。本文所介绍的SolpartMenu菜单控件,是一个基于.NET平台的菜单控件,它功能强大,操作简单,而且完全免费,可以说是目前最好的.NET菜单控件。
SolpartMenu控件由Jon Henning开发,目前最新版本是1.0.0.4。我们先来熟悉一下它的特点。
- 完全支持ASP.NET,与VS.NET无缝集成。
- 支持XML文件和代码生成菜单。
- 使用数据岛,支持客户端缓冲功能(此功能仅适用于IE 5以上版本)。
- 支持鼠标悬停效果。
- 支持十几种滤镜效果(某些滤镜效果仅支持IE 5.5以上版本)。
- 菜单智能化展开,完全避免子菜单在展开时会显示在屏幕外。
- 支持自定义菜单项风格。
- 支持菜单在页面中自动移动。
其它特点笔者不再一一介绍,请大家参见下文第一部分中的SolpartMenu属性一览表。笔者将以下图为范例,向大家讲述分别用XML文件和代码生成菜单的方法。
在VS.NET中使用SolpartMenu控件之前,我们必须要做两项准备工作:
1、 将SolpartMenu控件引用添加到“解决方案资源管理器”中。步骤如下:打开【解决方案资源管理器】面板,用鼠标右键单击【引用】,选择添加【引用….. 】菜单,在弹出的对话框中选择【.NET】卡片,单击【浏览】按钮,找到SolpartWebControls.dll文件,再依次单击【选择】,【确定】按钮。这样,SolpartMenu的引用就被添加到当前项目中。请参见下图
2、 将SolpartMenu控件添加到工具箱中,以后在应用的时候只要直接用鼠标把它拖拽到页面中即可。打开【工具箱】面板,鼠标右键单击,选择【自定义工具箱……】菜单,在弹出的对话框中选择【.NET框架组件】,单击【浏览】按钮,找到SolpartWebControls.dll文件,单击【确定】按钮即可。添加后的工具箱如右图所示。
一、 SolpartMenu控件的属性
SolpartMenu控件有许多属性,这些属性的组合应用构成了菜单的主体。下表是SolpartMenu控件的所有属性及其说明。
布局
IconWidth
菜单项图标区宽度
MenuBarHeight
菜单条高度
MenuBorderWidth
菜单边框宽度
MenuItemHeight
菜单项高度
数据
(DataBindings)
相关联的数据绑定的集合
MenuData
生成菜单的XML字串
MenuDataXMLFileName
包含菜单内容的XML文件名
外观
ArrowImage
指示下级子菜单的箭头图像
BackColor
菜单背景色
BackgroundMenuImage
菜单背景图像
Display
水平|垂直显示菜单
Font
Bold
字体加粗(True|False)
Italic
字体倾斜(True|False)
Name
首选字体名称
Names
可选的字体名称序列
Overline
字体上划线(True|False)
Size
字体大小(磅)
Strikeout
字体删除线(True|False)
Underline
字体下划线(True|False)
ForceDownlevel
用文字表示当前菜单层级(True|False)
ForeColor
菜单前景色
HighlightColor
菜单高亮色
IconBackGroundColor
图标区背景色
MenuAlignment
菜单对齐方式
MenuEffects
MenuTransition
菜单展开滤镜效果
MenuTransitionLength
滤镜效果的时间(秒)
MouseOverDisplay
鼠标悬停时菜单条效果
MouseOverExpand
鼠标悬停是否展开菜单(True|False)
ShadowColor
菜单阴影效果
ShadowDirection
菜单阴影方向
ShadowStrength
菜单阴影强度
RootArrow
菜单条箭头(推荐用于垂直显示菜单时)
SelectedBorderColor
选中菜单项边框颜色
SelectedColor
选中菜单项的背景色
SelectedForeColor
选中菜单项的前景色
ShadowColor
菜单项右、下边框颜色
行为
AccessKey
键盘的快捷方式
Enabled
菜单激活状态(True|False)
EnableViewState
是否自动保存菜单状态(True|False)
Moveable
菜单能否移动(True|False)
TabIndex
菜单的TAB键顺序
ToolTip
鼠标悬停时的文字说明
Visible
菜单是否可见(True|False)
杂项
(ID)
菜单的ID
SystemImagesPath
菜单中图片路径
SystemScriptPath
菜单脚本路径(用于代码生成菜单)
二、 使用XML文件生成菜单
使用XML文件生成菜单比较简单,它适用于菜单项更新不是很频繁的情况。我们只要制作一个XML文件,然后将SolpartMenu控件属性MenuDataXMLFileName指向它就可以了。具体步骤如下:
1、 打开工具箱,用鼠标将SolpartMenu控件拖拽到页面中,系统会自动为该控件赋ID值为SolpartMenu1。
2、 选中控件SolpartMenu1,打开属性面板,进行属性设置。本文中具体设置如下:
<cc1:SolpartMenu
id="SolpartMenu1"
MenuBarWidth="100px"
runat="server"
MenuDataXMLFileName="ycfcMenu.xml"
Font-Size="9pt"
MenuEffects-Style="filter:progid:DXImageTransform.Microsoft.Shadow(color='DimGray', Direction=135,
Strength=3)progid:DXImageTransform.Microsoft.Alpha(opacity=100) ;"
MenuEffects-MouseOverDisplay="Highlight"
MenuEffects-MouseOverExpand="True"
IconBackgroundColor="ActiveBorder"
MenuBorderWidth="0"
MenuBarHeight="20"
IconWidth="23"
MenuItemHeight="20"
SelectedColor="LightBlue"
BackColor="White"
ForeColor="#666666"
MenuEffects-MenuTransition="AlphaFade"
SelectedForeColor="White"
ForceDownlevel="False"
ShadowColor="Gainsboro">
</cc1:SolpartMenu>
3、 制作XML文件,并以ycfcMenu.xml为文件名保存在当前目录下。
在制作XML文件时,需要注意三点:
(1)菜单项的定义必须以根元素<root>开始,以</root>结束。
(2)XML文件中每个标记都必须成双成对地出现,即有开始标记同时必须有结束标记。
(3)每个菜单项(menuitem)都有一个唯一的ID值,它可以由字母、数字或字母与数字的组合构成,但绝对不能重复。
XML文件(ycfcMenu.XML)全部内容如下:
<root>
<menuitem id="1" title="简体中文">
<menuitem id="11" title=" 公司信息" image="0416ycfcMenu_introduction.gif">
<menuitem id="111" title=" 仪化简介" url="static/introduction.aspx" />
<menubreak />
<menuitem id="112" title=" 业务信息" url="static/operation.aspx" />
</menuitem>
<menubreak />
<menuitem id="12" title=" 投资者关系">
<menuitem id="121" title=" 临时报告" url="static/investor.aspx" />
<menubreak />
<menuitem id="122" title=" 定期报告" url="static/annual.aspx" />
<menubreak />
<menuitem id="123" title=" 公司推介" url="static/spread.aspx" />
<menubreak />
<menuitem id="124" title=" 仪化股票">
<menuitem id="1241" title=" 仪化A股最新价格" url="static/ycstock.aspx" image="0416ycfcMenu_ycstock.gif" />
<menubreak />
<menuitem id="1242" title=" 仪化H股最新价格" url="static/ycstock_h.aspx" />
</menuitem>
<menubreak />
<menuitem id="125" title=" 联系方式" url="static/investor_contact.aspx" image="0416ycfcMenu_contact.gif" />
</menuitem>
<menubreak />
<menuitem id="13" title=" 信息化建设" url="static/information.aspx" image="0416ycfcMenu_information.gif" />
<menubreak />
<menuitem id="14" title=" 人事教育" url="static/education.aspx" />
<menubreak />
<menuitem id="15" title=" 环保安全" url="static/environment.aspx" />
</menuitem>
<menuitem id="2" title="法律声明" url="static/legal.aspx" />
<menuitem id="3" title="网站地图" url="static/sitemap.aspx" />
<menuitem id="4" title="联合报价">
<menuitem id="41" title=" 仪征化纤等六家单位POY联合报价单" url="static/POYPrice.aspx" image="0416ycfcMenu_ycstock.gif" />
<menubreak />
<menuitem id="42" title=" 中国石化四家单位FDY联合报价单" url="static/FDYPrice.aspx" image="0416ycfcMenu_ycstock.gif" />
</menuitem>
</root>
此时用IE浏览器浏览本页,您就可以看到与本文中一模一样的菜单。以后如果需要对菜单进行修改或扩充,只要对XML文件进行适当的修改就可以了。
三、 使用代码隐藏文件动态生成菜单
与用XML文件生成菜单不同,使用代码生成菜单适应于菜单重新比较频繁的情况。我们可以将菜单信息放在数据库中,通过读取数据库来动态地生成菜单。以后菜单的更新只需对数据库进行操作就可以了,无须改动源代码。
1、 打开工具箱,用鼠标将SolpartMenu控件拖拽到页面中,系统会自动为该控件赋ID值为SolpartMenu1。
2、选中控件SolpartMenu1,打开属性面板,进行属性设置。本文中具体设置如下:
<cc1:SolpartMenu
id="SolpartMenu1"
MenuBarWidth="100px"
runat="server"
Font-Size="9pt"
MenuEffects-Style="filter:progid:DXImageTransform.Microsoft.Shadow(color='DimGray', Direction=135,
Strength=3) progid:DXImageTransform.Microsoft.Alpha(opacity=100) ;"
MenuEffects-MouseOverDisplay="Highlight"
MenuEffects-MouseOverExpand="True"
IconBackgroundColor="ActiveBorder"
MenuBorderWidth="0"
MenuBarHeight="20"
IconWidth="23"
MenuItemHeight="20"
SelectedColor="LightBlue"
BackColor="White"
ForeColor="#666666"
MenuEffects-MenuTransition="AlphaFade"
SelectedForeColor="Transparent"
SystemScriptPath="scripts/">
</cc1:SolpartMenu>
请注意到用代码和用XML生成菜单时属性设置的差别。在用XML生成菜单时,我们必须给出属性MenuDataXMLFileName的值,这个值就是XML文件名;而在此这里,我们必须为SystemScriptPath属性赋值,因为在用代码生成菜单时会调用一些随控件同时分发的脚本文件,该属性的值就是这些脚本文件所在的路径,默认为scripts子目录。
2、 打开代码分离文件.asp.vb,在函数Page_Load()中输入以下代码:
‘定义objItem为XML节点
Dim objItem As System.Xml.XmlNode
‘添加第一个菜单项(简体中文),同时指定其ID值为1
objItem = SolpartMenu1.AddMenuItem("1", "简体中文", "")
‘为“简体中文”项增加一个子菜单,ID值为11,带图标
SolpartMenu1.AddMenuItem(objItem, "11", " 公司信息", "", "0416ycfcMenu_introduction.gif")
‘增加一条菜单分隔线,根据参数为1决定其位置在“简体中文”的子菜单中
SolpartMenu1.AddBreak("1")
‘为“公司信息”增加一个三级子菜单“仪化简介”,指定链接地址,不带图标
SolpartMenu1.AddMenuItem("11", "111", " 仪化简介", "static/introduction.aspx")
‘增加一条菜单分隔线,根据参数为11决定其位置在“公司信息”的子菜单中
SolpartMenu1.AddBreak("11")
‘以下语句与上面相同,不再注释
SolpartMenu1.AddMenuItem("11", "112", " 业务信息", "static/operation.aspx")
SolpartMenu1.AddMenuItem(objItem, "12", " 投资者关系", "")
SolpartMenu1.AddMenuItem("12", "121", " 临时报告", "static/investor.aspx")
SolpartMenu1.AddBreak("12")
SolpartMenu1.AddMenuItem("12", "122", " 定期报告", "static/annual.aspx")
SolpartMenu1.AddBreak("12")
SolpartMenu1.AddMenuItem("12", "123", " 公司推介", "static/spread.aspx")
SolpartMenu1.AddBreak("12")
SolpartMenu1.AddMenuItem("12", "124", " 仪化股票", "")
SolpartMenu1.AddMenuItem("124", "1241", " 仪化A股最新价格", "static/ycstock.aspx")
SolpartMenu1.AddBreak("124")
SolpartMenu1.AddMenuItem("124", "1242", " 仪化H股最新价格", "static/ycstock_h.aspx")
SolpartMenu1.AddBreak("12")
SolpartMenu1.AddMenuItem("12", "125", " 联系方式", "static/investor_contact.aspx")
SolpartMenu1.AddBreak("1")
SolpartMenu1.AddMenuItem(objItem, "13", " 信息化建设", "static/information.aspx", "0416ycfcMenu_information.gif")
SolpartMenu1.AddBreak("1")
SolpartMenu1.AddMenuItem(objItem, "14", " 人事教育", "static/education.aspx")
SolpartMenu1.AddBreak("1")
SolpartMenu1.AddMenuItem(objItem, "15", " 环保安全", "static/environment.aspx")
objItem = SolpartMenu1.AddMenuItem("2", "法律声明", "static/legal.aspx")
objItem = SolpartMenu1.AddMenuItem("3", "网站地图", "static/sitemap.aspx")
objItem = SolpartMenu1.AddMenuItem("4", "联合报价", "")
SolpartMenu1.AddMenuItem(objItem, "41", " 仪征化纤等六家单位POY联合报价单", "static/POYprice.aspx", "0416ycfcMenu_ycstock.gif")
SolpartMenu1.AddBreak(objItem)
SolpartMenu1.AddMenuItem(objItem, "42", " 中国石化等四家单位FDY联合报价单", "static/FDYprice.aspx")
以上的代码比较简单,应该不难理解,笔者在此就不再多述。
从SolpartMenu控件的使用过程和使用效果来看,它的确是一款非常优秀的菜单控件,无论是用XML文件来生成菜单,还是在代码中生成动态菜单,对以后的修改或扩充都非常方便。当然我看重的不仅仅是它强大的功能,最重要的一点在于它是完全免费的,我们无须支付任何费用就可以无任何限制地使用。另外一点,由于它是基于.NET平台的,所以您只能在ASP.NET页面中使用它,而不能用于ASP等其他页面。
SolpartMenu控件的下载地址是:http://www.solpart.com/techcorner/SolpartMenuHistory.aspx,您在这里可以随时跟踪它的更新信息,下载最新版本。当然您也可以给作者写信,向他提出你使用后的建议和意见。
|
固定链接
http://fx0418.spaces.live.com/blog/cns!47A4D68978560739!155.entry
添加评论
从ASP迁移至ASP+ --处理会话变量(Session Variables)
从ASP迁移至ASP+ --处理会话变量(Session Variables)作者:yinsp 教程来源: 点击数: 14 更新时间:2005-2-15
现存的ASP版的eVille禁止对站点的某些部分的访问,除非用户已经登录。一些功能像查看将来的优惠特价,报名上课,以及了解自己当前的入学状况是受限制区域。如果想在未登录的状态下访问这类区域,你只会被重新导回到登录页面。用户在一份表格中输入他们的用户名与密码,然后与数据库的学生表进行比较,如果登录成功,一个名为blnLoggedIn的会话变量便被设为真。这种方法对这个站点是有效的,因为它架设在一台单一的服务器上。其它的方法将被用于web farms上的web应用程序,比如ASP+的会话存储,或SQL的会话存储。
===确认用户输入===
代码重写工作量最大的部分在于那些获取用户输入的页面,用户输入这些信息以登记成为eVille会员。有一个叫signup.asp的页面,用来让用户输入他们的重要信息,现有会员也可籍此更新信息。未转换前,表格的数据通过HTTP Post方式递交给一个叫cookie.asp的页面。该页会确认表格中的数据,如果存在错误,将用户导回signup.asp同时在query string中加上错误号。接着一个Select Case语句会将基于错误号的输出进行转换。我们检查的错误包括:
*未输入用户名
*未输入密码
*密码与密码确认不符
*用户名在数据库中已存在
通过将所有的输入域(field)转换成服务器控件,然后添加RequiredFieldValidators,可以轻松处理头两个可能发生的错误。RequiredFieldValidator只须简单确认经ControlToValidate域鉴别后的服务器控件中有输入值:
< tr>
< td valign="top">
< asp:RequiredFieldValidator runat=server
ControlToValidate = "txtUserName"
Display = "static"
errorMessage="< b>*< /b>"
ForeColor = "#CC3300" />
< /td>
< td valign=top>User Name:< /td>
< td valign=top>
< asp:TextBox id="txtUserName" size=25 runat=server />< /td>
< /tr>
这种方案是如此简单以至我们决定在把RequiredFieldValidator添加到所有的表格输入域中。在ASP中,我们通常会用一个VBScript函数来检验输入值,而现在我们只需把RequiredFieldValidator添加到每个我们想确认的控件中去。
至于密码与密码确认的比较,我们可以使用ASP+的CompareValidator。该控件允许我们设置ControlToValidate,ControlToCompare以及Operator属性(在本例中是一个等于号,即'Equal')。被指定的两个控件用Operator(即操作符)属性互相比较。与传统的If...Then语句相比,这种方法明显要简单,快捷:
< asp:CompareValidator runat=server
ControlToValidate = "txtConfirm"
ControlToCompare = "txtPassword"
Type = "String"
Operator = "Equal"
Display = "dynamic"
errorMessage="< b>*< /b>"
ForeColor = "#CC3300" />
基于不同的浏览器,ASP+ validator控件会相应执行客户端的javascript验证(针对IE4.0以上版本),或者执行服务器端验证(针对其它情况)。不论验证是如何执行的,服务器端的验证是必不可少的(以阻止某些淘气的家伙在客户端验证上耍花样)。
现在轮到最后一个错误了。假如提交的用户名已经存在,这就要求一点点页面的改动。到目前为止,我们已经用可以执行服务器端与客户端验证代码的服务器控件完成了所有的ASP+验证。至于最后这个错误,我们要提供一些自定义的服务器端验证,因为我们需要访问数据库以了解被请求的用户名是否已存在。我们可以利用ASP+ CustomValidator控件来解决这一问题。
|
固定链接
http://fx0418.spaces.live.com/blog/cns!47A4D68978560739!153.entry
添加评论
从ASP迁移至ASP+ --急不可耐了?转换其他的页面吧
从ASP迁移至ASP+ --急不可耐了?转换其他的页面吧作者:yinsp 教程来源: 点击数: 9 更新时间:2005-2-15
至于剩余的页面,我们依样画葫芦,使用ASP+ DataList或是Repeater控件。这样做是必要的,因为按设计要求需要定制的数据布局,而不是一个标准的表格显示。其中有个页面,classcatalog.aspx,有一处要求勾选值,然后根据选中的值,运行两个可能输出中的一个。该页就利用了Repeater控件,因此我们显示地创建了表格的行与列,而没有让控件来完成这一切。这是在templates的内部完成的。在ASP中,看起来是这样子的:
'检查是否提供优惠
If rsSessions("Special") = True Then
'若本课程提供优惠,则输出“Special Offer!”
Response.Write "< td valign=top align=center>" & vbCrLf
Response.Write "< a href=""classdetail.asp?SessionID="
Response.Write rsSessions("SessionID")
Response.Write """name=""Click for more detail"">"
Response.Write "Special Offer!"
Response.Write "< /td>"
Else
'若本课程不提供优惠,则在栏中输出"--"
Response.Write "< td valign=top align=center>--< /td>"
End If
为了在ASP+中达到同样的效果,我们使用了一个函数。在脚本块中,位于Page_Load 事件下,我们创建以下代码:
Function CheckSpecial(ByRef blnSpecial As Boolean, _
ByRef intNumber As Integer) As String
If blnSpecial = True Then
CheckSpecial = "< a href=" & Chr(34) & _
"classdetail.aspx?SessionID=" & _
intNumber & Chr(34) & ">Special!!< /a>"
Else
CheckSpecial = "--"
End If
End Function
然后只须从ASP+ Repeater中调用函数:
< template name = "ItemTemplate">
< tr>
[ other data being displayed ]
< td valign=top align=center>
< %=CheckSpecial(Container.DataItem("Special"),
Container.DataItem("Session_ID"))%>
< /td>
< /tr>
< /template>
Container指的是涉及我们的ASP+ Reapter控件的数据的父对象。通过调用Container.DataItem("Special")及Container.DataItem("Session_ID") ,将父对象(即ASP+ Repeater控件)中的列的值传递给了函数。
|
- 3:50
- 添加评论
- 固定链接
- 引用通告 (0)
- 记录它
- asp.net 基础
固定链接
http://fx0418.spaces.live.com/blog/cns!47A4D68978560739!152.entry
添加评论
从ASP迁移至ASP+ --将HTML表格转换为ASP+数据列表
从ASP迁移至ASP+ --将HTML表格转换为ASP+数据列表 作者:yinsp 教程来源: 点击数: 10 更新时间:2005-2-15
我们从数据存储中取回的数据将被用来显示eVille提供的下两节课程。基于页面设计方面的考虑,标准的表格在这里并不合适。数据需要以一种自定义的格式展示,用来显示课程名,课程描述,以及报名的链接(该链接通过QueryString传递Session_ID)。下面是原始的ASP页面利用ADO记录集创建的一个循环,该循环为每条记录创建一个新的行。
< table width="100%" border="0">
< tr>
< td class="headerRow">Upcoming Events< /td>
< /tr>
< %Do While Not rsUpcoming.EOF%>
< tr>
< td>< p>< b>< %=rsUpcoming("Title")%>< /b>< br>
< %=rsUpcoming("Description")%>< /p>
< p>< a href="enroll.asp?SessionID=< %=rsUpcoming("Session_ID")%>">
Enroll Now!< /a>< /p>< br>
< /td>
< /tr>
< %
rsUpcoming.MoveNext
Loop
%>
< /table>
在ASP+中,我们利用新的服务器控件,DataList。ASP+ DataList是用来创建自定义页面布局的新控件中的一种,这些布局都是基于表格的。DataList通过你赋予的属性来创建表格的行与列,同时使用Template来控制布局。在下面的例子中,我们使用ItemTemplate来格式化每行的布局。该templates控制每个显示出来的单元的布局(一个记录对一个单元):
< tr>
< td class="headerRow">Upcoming Events< /td>
< /tr>
< /table>
< asp:DataList id="dlUpcoming" width="100%" runat="server">
< template name = "ItemTemplate">
< p>< b>< %# Container.DataItem("Title") %>< /b>< br/>
< %# Container.DataItem("Description") %>< /p>
< p>< a href="enroll.asp?SessionID=< %# Container.DataItem("Session_ID") %>">
Enroll Now!< /a>< /p>< br/>
< /template>
< /asp:DataList>
缺省情况下,DataList创建一个单列的表格。通过改变它的一系列属性可使其创建多个列:
< asp:DataList id="dlUpcoming" width="100%"
RepeatDirection="Horizontal"
RepeatColumns="2"
runat="server">
其他的数据显示控件包括DataGrid(标准表格布局)和Repeater(完全自定义布局)。
如果我们现在来看页面,表中的任何内容都不会显示出来。这是因为我们虽然设计了布局,却没提供数据。我们必须显式地将数据(DataSet中的一个DataView)绑定到ASP+ DataList控件。通过设置DataSource属性,调用将要显示数据的控件的DataBind()方法,我们可以做到这一点。
由于ASP+ web应用程序在运行前经过编译,我们毋须遵循页面上的线性处理流程。即使DataList的ID直到页面代码的中部才被确定(当我们实际将控件放在页面上时),我们还是可以在页面起始部分的Page_Load事件中指定控件。这样一来,当页面装载时数据就已经被绑定到控件。
< script language="vb" runat=server>
Sub Page_Load(Source As Object, E As EventArgs)
. . .
cmdUpcoming.FillDataSet(dsUpcoming, "Upcoming")
dlUpcoming.DataSource = dsUpcoming.Tables("Upcoming").DefaultView
dlUpcoming.DataBind()
End Sub
< /script>
使用诸如DataList这样的ASP+服务器控件,使我们能有计划性地访问该控件。这样我们便可以针对它的属性以及方法来编写代码。在第一行中,我们将DataList的DataSource属性设为DataSet中的DataView(一个单独的数据表)。我们特别将它设为DataSet的表集中的Upcoming表的缺省视图(view)。设置了DataSource后,我们就调用DataList控件的DataBind()方法,将SQL的查询结果绑定到DataList控件。
|
- 3:49
- 添加评论
- 固定链接
- 引用通告 (0)
- 记录它
- asp.net 基础
固定链接
http://fx0418.spaces.live.com/blog/cns!47A4D68978560739!151.entry
添加评论
从ASP迁移至ASP+ ----------进入DataSet
从ASP迁移至ASP+ ----------进入DataSet 作者:yinsp 教程来源: 点击数: 13 更新时间:2005-2-15
ADO+引入了DataSet和DataView的概念。DataSet类似于记录集的集合,因为它能保存一个或多个数据及其之间关系的表(table)。DataView是这些表中之一的实现,类似于ADO 记录集。在上面的例子中,我们的DataSet只保存一个表:Upcoming,我们要将之驻留于ASP+服务器控件中。可以通过以下方式向DataSet中加入更多表。
*重新定义我们的SQL语句。
*将ADODataCommand的SelectCommand属性设置为一个新的ADODataCommand
*调用ADODataCommand的FillDataSet方法
FillDataSet方法将SQL查询结果中的表存入到被传递至方法调用中的DataSet中。加入另一个表会导致如下改变:
dscUpcoming = New ADODataSetCommand(strSQL, Connect.ConnectToDB())
dscUpcoming.FillDataSet(dsUpcoming, "Upcoming")
'重定义SQL语句
strSQL = "SELECT * FROM Students"
'设置ADODataSetCommand的SelectCommand属性
dscUpcoming.SelectCommand = New ADOCommand(strSQL, Connect.ConnectToDB())
'使用FillDataSet方法将结果作为新表添加进DataSet
dscUpcoming.FillDataSet(dsUpcoming, "Students")
现在我们已经建立了到数据库的连接并且将数据返回到DataSet中,然而我们还没有利用这些数据。
|
- 3:47
- 添加评论
- 固定链接
- 引用通告 (0)
- 记录它
- asp.net 基础
固定链接
http://fx0418.spaces.live.com/blog/cns!47A4D68978560739!150.entry
添加评论
利用MD5加密数据库中的密码
.NET提供了进行数据加密类,下面就用例子进行说明如何使用MD5进行数据加密。
首先,创建一个UserAccount表,字段两个:UserName和Password,类型分别为varchar(25)和binary(16),下面的ASP.NET代码就是创建用户时的具体实现:
<%@ Import Namespace="System.Security.Cryptography" %> <%@ Import Namespace="System.Text" %> <%@ Import Namespace="System.Data" %> <%@ Import Namespace="System.Data.SqlClient" %> <script runat="server" language="VB"> Sub CreateAccount(sender as Object, e as EventArgs) '1. 创建连接 Const strConnString as String strConnString= "Data Source=.;Initial Catalog=test;User Id=sa;Password=;" Dim objConn as New SqlConnection(strConnString) '2. 创建Command对象 Dim strSQL as String = _ "INSERT INTO UserAccount(Username,Password) " & _ "VALUES(@Username, @Password)" Dim objCmd as New SqlCommand(strSQL, objConn) '3. 创建参数 Dim paramUsername as SqlParameter paramUsername = New SqlParameter("@Username", SqlDbType.VarChar, 25) paramUsername.Value = txtUsername.Text objCmd.Parameters.Add(paramUsername) '加密密码字段 Dim md5Hasher as New MD5CryptoServiceProvider() Dim hashedBytes as Byte() Dim encoder as New UTF8Encoding() hashedBytes = md5Hasher.ComputeHash(encoder.GetBytes(txtPwd.Text)) Dim paramPwd as SqlParameter paramPwd = New SqlParameter("@Password", SqlDbType.Binary, 16) paramPwd.Value = hashedBytes objCmd.Parameters.Add(paramPwd) '插入数据库 objConn.Open() objCmd.ExecuteNonQuery() objConn.Close() 'Redirect 其它页面 End Sub </script> <form runat="server"> <h1>创建帐号:</h1> 用户名: <asp:TextBox runat="server" id="txtUsername"/> <br/> 密码: <asp:TextBox runat="server" id="txtPwd" TextMode="Password"/> <p><asp:Button runat="server" Text="创建用户" OnClick="CreateAccount"/></p> </form>
下面是对用户进行验证的ASP.NET代码:
<%@ Import Namespace="System.Security.Cryptography" %> <%@ Import Namespace="System.Text" %> <%@ Import Namespace="System.Data" %> <%@ Import Namespace="System.Data.SqlClient" %> <script runat="server" language="VB"> Sub Login(sender as Object, e as EventArgs) '1. 创建连接 Const strConnString as String strConnString= "Data Source=.;Initial Catalog=test;User Id=sa;Password=;" Dim objConn as New SqlConnection(strConnString) '2. 创建Command对象 Dim strSQL as String = "SELECT COUNT(*) FROM UserAccount " & _ "WHERE Username=@Username AND Password=@Password" Dim objCmd as New SqlCommand(strSQL, objConn) '3. 创建参数 Dim paramUsername as SqlParameter paramUsername = New SqlParameter("@Username", SqlDbType.VarChar, 25) paramUsername.Value = txtUsername.Text objCmd.Parameters.Add(paramUsername) '加密密码 Dim md5Hasher as New MD5CryptoServiceProvider() Dim hashedDataBytes as Byte() Dim encoder as New UTF8Encoding() hashedDataBytes = md5Hasher.ComputeHash(encoder.GetBytes(txtPwd.Text)) Dim paramPwd as SqlParameter paramPwd = New SqlParameter("@Password", SqlDbType.Binary, 16) paramPwd.Value = hashedDataBytes objCmd.Parameters.Add(paramPwd) '执行查询 objConn.Open() Dim iResults as Integer = objCmd.ExecuteScalar() objConn.Close() If iResults = 1 then '合法 Else '不合法 End If End Sub </script> <form runat="server"> <h1>登录:</h1> 用户名:<asp:TextBox runat="server" id="txtUsername"/><br/> 密 码:<asp:TextBox runat="server" id="txtPwd" TextMode="Password"/> <p><asp:Button runat="server" Text="登录" OnClick="Login"/> </form>
下面是MD5CryptoServiceProvider直接生成的例子:
<%@ Import Namespace="System.Security.Cryptography" %> <%@ Import Namespace="System.Text" %> <script language="VB" runat="server"> Sub DisplayEncryptedText(sender as Object, e as EventArgs) If Page.IsValid then Dim md5Hasher as New MD5CryptoServiceProvider() Dim hashedDataBytes as Byte() Dim encoder as New UTF8Encoding() hashedDataBytes = md5Hasher.ComputeHash(encoder.GetBytes(txtPassword.Text)) ltlResults.Text = "<b>Encrypted Results</b><br /> The results are encrypted into " & _ "an array of 16 bytes. These 16 bytes contain the values:<p><ul>" Dim b as Byte For Each b in hashedDataBytes ltlResults.Text &= "<li>" & b & "</li>" Next b ltlResults.Text &= "</ul>" End If End Sub </script> <form runat="server"> Enter a string: <asp:TextBox id="txtPassword" runat="server" /> <asp:RequiredFieldValidator runat="server" ControlToValidate="txtPassword" Display="Dynamic" ErrorMessage="<i>You must provide a value here...</i>" /> <asp:RegularExpressionValidator runat="server" ControlToValidate="txtPassword" Display="Dynamic" ErrorMessage="<i>The string must be 20 characters or less...</i>" ValidationExpression="^.{1,20}$" /> <br /> <asp:Button runat="server" Text="View the String as Encrypted Text" OnClick="DisplayEncryptedText" /> <p> <asp:Literal runat="server" id="ltlResults" /> </form>
|
- 3:44
- 添加评论
- 固定链接
- 引用通告 (0)
- 记录它
- asp.net 示例
固定链接
http://fx0418.spaces.live.com/blog/cns!47A4D68978560739!149.entry
添加评论
XP 风格的可拖动列、可排序、可改变宽度的DataGrid的例子
结合客户端脚本,我们可以创建出可以拖动列,可以拖动改变列宽度,显示、隐藏列、编辑列的XP风格的 DataGrid,下面就是所有的代码。自己调试时请注意修改eMeng.Exam.UltraGrid路径。
UltraGrid.aspx
XP 风格的可拖动列、可排序、可改变宽度的DataGrid的例子
XP 风格的可拖动列、可排序、可改变宽度的DataGrid的例子。
UltraGrid.aspx.cs
using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Data.OleDb; using System.Drawing; using System.Web; using System.Web.SessionState; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; namespace eMeng.Exam.UltraGrid { /// /// UltraGrid 的摘要说明。本例子演示了如何创建可排序、可拖放、可调整宽度的XP风格的DataGrid。 /// 出自:【孟宪会之精彩世界】 /// public class UltraGrid : System.Web.UI.Page { protected System.Web.UI.HtmlControls.HtmlGenericControl gridRow; protected System.Web.UI.WebControls.Literal RowItem; protected System.Web.UI.HtmlControls.HtmlGenericControl coolUltraGrid1; private void Page_Load(object sender, System.EventArgs e) { // 在此处放置用户代码以初始化页面 coolUltraGrid1.Attributes.Add("class","coolUltraGrid"); coolUltraGrid1.Attributes.Add("style","WIDTH: 100%; HEIGHT: 400"); coolUltraGrid1.Attributes.Add("borderStyle","2"); coolUltraGrid1.Attributes.Add("altRowColor","oldLace"); coolUltraGrid1.Attributes.Add("selectionStyle","1"); /// 请根据你的数据库的设置,修改这里的数据库连接字符串和查询语句。其它不要修改。 OleDbConnection cn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\xxx.mdb"); cn.Open(); string sqlstring = "SELECT TOP 30 D.Title As 文档标题,D.CreateDate as 发布时间,S.Title AS 所属栏目 "; sqlstring += "FROM Document D,Subject S WHERE D.pid=S.id ORDER BY D.CreateDate DESC"; OleDbCommand cmd = new OleDbCommand(sqlstring,cn); OleDbDataReader dr; dr=cmd.ExecuteReader(CommandBehavior.CloseConnection); /// ///组合表头 /// int FieldNumber = dr.FieldCount; int ColWidth,Tmp = 0; if(FieldNumber == 0) Response.End(); ColWidth = (int)100/FieldNumber; string TableHeader = ""; for(int i=0;i"+dr.GetName(i).ToString()+""; else TableHeader +=""+dr.GetName(i).ToString()+""; Tmp+=ColWidth; } } gridRow.InnerHtml=TableHeader; int RowNumber = 1; TableHeader = "
"; while(dr.Read()) { TableHeader += "
"; for(int i=0;i"; } TableHeader += "
"; RowNumber++; } TableHeader += "
"; RowItem.Text=TableHeader; cn.Close(); } #region Web Form Designer generated code override protected void OnInit(EventArgs e) { // // CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。 // InitializeComponent(); base.OnInit(e); } /// /// 设计器支持所需的方法 - 不要使用代码编辑器修改 /// 此方法的内容。 /// private void InitializeComponent() { this.Load += new System.EventHandler(this.Page_Load); } #endregion } }
|
- 3:41
- 添加评论
- 固定链接
- 引用通告 (0)
- 记录它
- asp.net 示例
固定链接
http://fx0418.spaces.live.com/blog/cns!47A4D68978560739!148.entry
添加评论
对于长时间装载的ASP.NET页面如何在客户端浏览器中显示进度?
对于加载时间比较长的ASP.NET页面,我们可以在客户端浏览器中显示进度条来显示页面正在装载。下面就是具体的实现过程:
1. 新建项目,名字为WebPortal,在项目类型中选择Visual C#项目或者Visual Basic项目都可;
2. 在模板类型中选择ASP.NET Web应用程序;
3. 位置里输入:http://localhost/WebPortal;
4. 添加新项:名字为ShowProgress的Web窗体。
5. 在您的Web窗体ShowProgress.aspx上添加任何其他的Web服务器控件。
6. 在ShowProgress.aspx上单击右键,点“查看代码”,在最上面输入:
Visual C# .NET代码 using System.Threading; Visual Basic .NET代码 Imports System.Threading
7. 在Page_Load事件里输入: Visual C# .NET代码 Response.Write("
"); Response.Write("_"); Response.Write("
"); Response.Write(""); Response.Write(""); Response.Flush(); Thread.Sleep(10000); Visual Basic .NET代码 Response.Write("
") Response.Write("_") Response.Write("
") Response.Write("") Response.Write("") Response.Flush() Thread.Sleep(10000)
8. 在ShowProgress.aspx窗体的html的中输入:
9. 点在浏览器中查看即可。
|
- 3:40
- 添加评论
- 固定链接
- 引用通告 (0)
- 记录它
- asp.net 示例
固定链接
http://fx0418.spaces.live.com/blog/cns!47A4D68978560739!147.entry
添加评论
Cache浏览器
对Cache进行浏览并管理。
Cache管理器 浏览、删除缓存
数量:
清除全部缓存项
说明:DataGrid中用到了HyperLink Web控件,是为了方便本站的管理,其它则不必这样用。
|
- 3:38
- 添加评论
- 固定链接
- 引用通告 (0)
- 记录它
- asp.net 示例
固定链接
http://fx0418.spaces.live.com/blog/cns!47A4D68978560739!146.entry
添加评论
在ASP.NET中动态创建柱状图和饼图
在应用程序开发中,我们会经常遇到把从数据源动态取回的数据用统计图表现出来,在Microsoft .NET Framework出现之前,我们采取的方法主要是编写组件来完成这一任务。现在,利用Microsoft .NET Framework提供的丰富的GDI+类和对象可以很轻松地实现这一功能。在本文中,我们就来看看在ASP.NET中如何动态创建常用的柱状图和饼图。数据源有许多种,在本文里我们就以数组来进行示例,但本例的方法很容易转换成数据库类型的数据源来进行。
第一步:创建一个新的ASP.NET项目。
打开Microsoft Visual Studio .NET,点击“文件(File)”-“新建(New)”-“项目(Project)”,打开“新建项目(New Project)”对话框,在“项目类型(Project Types)”里选择“Visual Basic 项目(Projects)”,在“模板(Templates)”里选择“ASP.NET应用程序(Web Application)”,在应用程序地址里输入:http://localhost/aspCharts,点击“确定(OK)”按钮,Microsoft Visual Studio .NET将会自动在wwwroot目录下创建一个名为aspCharts的Web工程。
第二步:为默认起始页编写代码(AspxChart.aspx)。
我们要在这个页面里显示动态创建的图形,打开AspxChart.aspx的标签页的“HTML”视图,插入下面的代码:
ASP.NET 中动态创建图形范例
第三步:添加名为Chart.aspx的Web窗体页。
打开“解决方案资源管理器(Solution Explorer)”,在“aspCharts项目”上点击右键,选择“添加(Add)”-“添加新项(Add New Item)”,弹出“添加新项(Add New Item)”对话框,在右边的“模板”里选择“Web 窗体”,在底下的名字输入框了输入“Chart.aspx”,点击“打开”按钮。
第四步:为“Chart.aspx”Web 窗体页添加代码。
在“Chart.aspx”窗体上点击右键,选择“查看代码(View Code)”,在代码的第一行添加下面二行:
Imports System.Drawing Imports System.Drawing.Imaging Public Class Chart Inherits System.Web.UI.Page #Region " Web 窗体设计器生成的代码 " '该调用是 Web 窗体设计器所必需的。 Private Sub InitializeComponent() End Sub Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init 'CODEGEN: 此方法调用是 Web 窗体设计器所必需的 '不要使用代码编辑器修改它。 InitializeComponent() End Sub #End Region '创建页面事件 Private Sub Page_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load '声明整型变量i, Dim i As Integer '创建一个位图对象,用来放置柱形图,我们可以把它看作是一块画布。 '这里宽、高分别是400和200,当然,你也可以根据需要把它们做为参数来进行传递。 Dim objBitMap As New Bitmap(400, 200) '声明一个图形对象,在上面创建的位图上画图。 Dim objGraphics As Graphics '从指定的objBitMap对象创建新图形对象objGraphics。 objGraphics = Graphics.FromImage(objBitMap) '清除整个绘图面并以指定白色为背景色进行填充。 objGraphics.Clear(Color.White) '创建一个数据源,这里我们为了方便其间,采用数组做为柱形图和饼图的数据源。 Dim arrValues(5) As Integer arrValues(0) = 100 arrValues(1) = 135 arrValues(2) = 115 arrValues(3) = 125 arrValues(4) = 75 arrValues(5) = 120 '定义数组对象,用来描述图例。 Dim arrValueNames(5) As String arrValueNames(0) = "一月" arrValueNames(1) = "二月" arrValueNames(2) = "三月" arrValueNames(3) = "四月" arrValueNames(4) = "五月" arrValueNames(5) = "六月" '在画布(objBitMap对象)的坐标5,5处,用指定的Brush(画笔)对象和Font(字体)对象绘制统计图标题。 objGraphics.DrawString(" X 公司上半年销售情况", _ New Font("宋体", 16), Brushes.Black, New PointF(5, 5)) '创建图例文字。 Dim symbolLeg As PointF = New PointF(335, 20) Dim descLeg As PointF = New PointF(360, 16) '画出图例。利用objGraphics图形对象的三个方法画出图例: 'FillRectangle()方法画出填充矩形,DrawRectangle()方法画出矩形的边框, 'DrawString()方法画出说明文字。这三个图形对象的方法在 .NET 框架类库类库中均已重载, '可以很方便根据不同的参数来画出图形。 For i = 0 To arrValueNames.Length - 1 '画出填充矩形。 objGraphics.FillRectangle(New SolidBrush(GetColor(i)), symbolLeg.X, symbolLeg.Y, 20, 10) '画出矩形边框。 objGraphics.DrawRectangle(Pens.Black, symbolLeg.X, symbolLeg.Y, 20, 10) '画出图例说明文字。 objGraphics.DrawString(arrValueNames(i).ToString, New Font("宋体", 10), Brushes.Black, descLeg) '移动坐标位置,只移动Y方向的值即可。 symbolLeg.Y += 15 descLeg.Y += 15 Next i '遍历数据源的每一项数据,并根据数据的大小画出矩形图(即柱形图的柱)。 For i = 0 To arrValues.Length - 1 '画出填充矩形。 objGraphics.FillRectangle(New SolidBrush(GetColor(i)), _ (i * 35) + 15, 200 - arrValues(i), 20, arrValues(i) + 5) '画出矩形边框线。 objGraphics.DrawRectangle(Pens.Black, (i * 35) + 15, 200 - arrValues(i), 20, arrValues(i) + 5) Next '下面画饼图。先定义两个变量,代表当前角度和总角度,以便于画图时将角度进行按比例换算。 Dim sglCurrentAngle As Single = 0 Dim sglTotalAngle As Single = 0 '定义一个变量,代表总的销售额。 Dim sglTotalValues As Single = 0 '计算总销售额。 For i = 0 To arrValues.Length - 1 sglTotalValues += arrValues(i) Next i = 0 '遍历数据源的每一项数据,并根据数据的大小画出饼图。 '图形对象的FillPie()方法和DrawPie()在.NET 框架类库中已重载。 For i = 0 To arrValues.Length - 1 '计算当前角度值:当月销售额 / 总销售额 * 360,得到饼图中当月所占的角度大小。 sglCurrentAngle = arrValues(i) / sglTotalValues * 360 '画出填充圆弧。 objGraphics.FillPie(New SolidBrush(GetColor(i)), _ 220, 95, 100, 100, sglTotalAngle, sglCurrentAngle) '画出圆弧线。 objGraphics.DrawPie(Pens.Black, 220, 95, 100, 100, sglTotalAngle, sglCurrentAngle) '把当前圆弧角度加到总角度上。 sglTotalAngle += sglCurrentAngle Next i '将objGraphics对象以指定的图形格式(这里是Gif)保存到指定的Stream对象,并输出到客户端。 objBitMap.Save(Response.OutputStream, ImageFormat.Gif) End Sub '下面这段函数用来根据不同的月份返回不同的颜色值。 Private Function GetColor(ByVal itemIndex As Integer) As Color Dim objColor As Color Select Case itemIndex Case 0 objColor = Color.Blue Case 1 objColor = Color.Red Case 2 objColor = Color.Yellow Case 3 objColor = Color.Purple Case 4 objColor = Color.Orange Case 5 objColor = Color.Brown Case 6 objColor = Color.Gray Case 7 objColor = Color.Maroon Case 8 objColor = Color.Maroon Case Else objColor = Color.Blue End Select Return objColor End Function End Class
好了,我们的代码已经写完,点击“全部保存”按钮,然后按“F5”执行,看看最好的结果。如果没有错误的话,您将会看到如下的结果:
值得说明的是,上面只是简单地示例了如何利用.NET 框架类库中的图形类创建简单的图形,但.NET 框架类库中还提供了更高级的二维和矢量图形功能,利用这些高级功能,我们可以创建出二维或矢量的图形,那时,我们的图形看起来会更加形象。
本文所有代码在简体中文Windows 2000 + .NET FrameWork 1.0(英文正式版)+ .NET FrameWork SP1和Windows XP + .NET FrameWork 1.0(中文版)下调试通过。
C#代码
using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Drawing; using System.Web; using System.Web.SessionState; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; using System.Drawing.Imaging; namespace eMeng.Exam { /// /// Chart 的摘要说明。 /// public class Chart : System.Web.UI.Page { private void Page_Load(object sender, System.EventArgs e) { // 在此处放置用户代码以初始化页面 Bitmap objBitMap = new Bitmap(400, 200); Graphics objGraphics; objGraphics = Graphics.FromImage(objBitMap); objGraphics.Clear(Color.White); int[] arrValues = {100,135,115,125,75,120}; string[] arrValueNames = new string[]{"一月","二月","三月","四月","五月","六月"}; objGraphics.DrawString(" X 公司上半年销售情况", new Font("宋体", 16), Brushes.Black, new PointF(5, 5)); PointF symbolLeg = new PointF(335, 20); PointF descLeg = new PointF(360, 16); for (int i = 0; i < arrValueNames.Length; i++) { objGraphics.FillRectangle(new SolidBrush(GetColor(i)), symbolLeg.X, symbolLeg.Y, 20, 10); objGraphics.DrawRectangle(Pens.Black, symbolLeg.X, symbolLeg.Y, 20, 10); objGraphics.DrawString(arrValueNames[i].ToString(), new Font("宋体", 10), Brushes.Black, descLeg); symbolLeg.Y += 15; descLeg.Y += 15; } for (int i = 0; i < arrValues.Length; i++) { objGraphics.FillRectangle(new SolidBrush(GetColor(i)), (i * 35) + 15, 200 - arrValues[i], 20, arrValues[i] + 5); objGraphics.DrawRectangle(Pens.Black, (i * 35) + 15, 200 - arrValues[i], 20, arrValues[i] + 5); } float sglCurrentAngle = 0; float sglTotalAngle = 0; float sglTotalValues = 0; for (int i = 0; i <= arrValues.Length - 1; i++) { sglTotalValues += arrValues[i]; } for (int i = 0; i < arrValues.Length; i++) { sglCurrentAngle = arrValues[i] / sglTotalValues * 360; objGraphics.FillPie(new SolidBrush(GetColor(i)), 220, 95, 100, 100, sglTotalAngle, sglCurrentAngle); objGraphics.DrawPie(Pens.Black, 220, 95, 100, 100, sglTotalAngle, sglCurrentAngle); sglTotalAngle += sglCurrentAngle; } objBitMap.Save(Response.OutputStream, ImageFormat.Gif); } private Color GetColor(int itemIndex) { Color objColor; if (itemIndex == 0) { objColor = Color.Blue; } else if (itemIndex == 1) { objColor = Color.Red; } else if (itemIndex == 2) { objColor = Color.Yellow; } else if (itemIndex == 3) { objColor = Color.Purple; } else if (itemIndex == 4) { objColor = Color.Orange; } else if (itemIndex == 5) { objColor = Color.Brown; } else if (itemIndex == 6) { objColor = Color.Gray; } else if (itemIndex == 7) { objColor = Color.Maroon; } else if (itemIndex == 8) { objColor = Color.Maroon; } else { objColor = Color.Blue; } return objColor; } #region Web 窗体设计器生成的代码 override protected void OnInit(EventArgs e) { // // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。 // InitializeComponent(); base.OnInit(e); } /// /// 设计器支持所需的方法 - 不要使用代码编辑器修改 /// 此方法的内容。 /// private void InitializeComponent() { this.Load += new System.EventHandler(this.Page_Load); } #endregion } }
|
- 3:36
- 添加评论
- 固定链接
- 引用通告 (0)
- 记录它
- asp.net 示例
固定链接
http://fx0418.spaces.live.com/blog/cns!47A4D68978560739!145.entry
添加评论
如何点击按钮弹出新窗口,输入数据后返回并刷新页面?
在一些.NET论坛中有人经常会问:如何在页面中点击按钮打开新页面,输入数据,然后返回到初始页面并进行更新?要解决这个问题,应该弄清楚window.showModalDialog()的用法,本人在http://www.csdn.net/Develop/read_article.asp?id=15113已经做过介绍。下面就用例子介绍如何在ASP.NET中实现这个功能。
本例子共3个页面,其中WebForm2.aspx是过渡页面,是为了防止提交时打开新页面。
WebForm1.aspx
WebForm1
从当前页面打开新窗口,并把变量传递到新窗口的例子,可以多次打开提交。
这是初始值,将被传递到新窗口。
WebForm1.aspx.vb
Public Class WebForm1 Inherits System.Web.UI.Page Protected WithEvents TextBox1 As System.Web.UI.WebControls.TextBox Protected WithEvents Form1 As System.Web.UI.HtmlControls.HtmlForm Protected WithEvents Label1 As System.Web.UI.WebControls.Label Protected WithEvents Button1 As System.Web.UI.WebControls.Button #Region " Web 窗体设计器生成的代码 " '该调用是 Web 窗体设计器所必需的。 Private Sub InitializeComponent() End Sub Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init 'CODEGEN: 此方法调用是 Web 窗体设计器所必需的 '不要使用代码编辑器修改它。 InitializeComponent() End Sub #End Region Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load '在此处放置初始化页的用户代码 If (Not IsClientScriptBlockRegistered("clientScript")) Then Dim strScript As String = "" + vbCrLf RegisterClientScriptBlock("clientScript", strScript) End If Button1.Attributes.Add("onclick", "OpenWin()") End Sub End Class
WebForm2.aspx
WebForm2
WebForm2.aspx.vb
Public Class WebForm2 Inherits System.Web.UI.Page #Region " Web 窗体设计器生成的代码 " '该调用是 Web 窗体设计器所必需的。 Private Sub InitializeComponent() End Sub Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init 'CODEGEN: 此方法调用是 Web 窗体设计器所必需的 '不要使用代码编辑器修改它。 InitializeComponent() End Sub #End Region Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load '在此处放置初始化页的用户代码 End Sub End Class
WebForm3.aspx
WebForm3 请输入您的大名:
WebForm3.aspx.vb
Public Class WebForm3 Inherits System.Web.UI.Page Protected WithEvents TextBox1 As System.Web.UI.WebControls.TextBox Protected WithEvents Label1 As System.Web.UI.WebControls.Label Protected WithEvents Button1 As System.Web.UI.WebControls.Button Protected MyBody As System.Web.UI.HtmlControls.HtmlControl #Region " Web 窗体设计器生成的代码 " '该调用是 Web 窗体设计器所必需的。 Private Sub InitializeComponent() End Sub Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init 'CODEGEN: 此方法调用是 Web 窗体设计器所必需的 '不要使用代码编辑器修改它。 InitializeComponent() End Sub #End Region Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load '在此处放置初始化页的用户代码 If IsPostBack Then Dim strScript As String = "" + vbCrLf If (Not IsClientScriptBlockRegistered("clientScript")) Then RegisterClientScriptBlock("clientScript", strScript) End If End If If Not IsPostBack Then MyBody.Attributes.Add("onload", "document.Form1.TextBox1.value=window.parent.dialogArguments") End If End Sub End Class
|
- 3:34
- 添加评论
- 固定链接
- 引用通告 (0)
- 记录它
- asp.net 示例
固定链接
http://fx0418.spaces.live.com/blog/cns!47A4D68978560739!144.entry
添加评论