2015.8.20-2015.8.24javascript
JQuery
1、语法的基本结构:
第一步:导入JQuery脚本包css
从VS的新建web空网站里的"解决方案资源管理器"-"Scripts文件夹"中找到"jquery-1.7.1.min.js"在界面中打开,右键标签栏选择"打开所在的文件夹",找到"jquery-1.7.1.min.js"先右键复制粘贴到桌面上,而后再从桌面右键复制粘贴到新建空网站中
第二步:写JQuery的ready事件
$(document).ready(function(){
//在这里面写代码
});html
注意:
1.JQuery的触发时机---浏览器把页面的HTML加载完毕时触发
2.非侵入性的编码方式
3.链式结构的编码方式
4.集合式操做---操做选择器选择出来的一组对象
2、具体语法
(一)找到元素
选择器的种类:一样式表(CSS3.0)
第一类:基本选择器
1.最最基本的:标签,ID选择器,class选择器
2.组合选择器:空格(后代),逗号(并列),标签名.class(筛选),> (子级选择器)
第二类:过滤选择器
1.基本过滤(按照HTML标记的书写顺序来过滤)
:first---选取第一个
:last---选取最后一个
:eq(索引号)---选取任意一个
:lt(索引号)---选取大于某个索引号的
:gt(索引号)---选取小于某个索引号的
:odd---选取奇数个
:even---选取偶数个
:not(选择器)---排除某几个java
2.属性过滤
[属性名]---选择拥有某个属性的元素
[属性名=值]---选取属性名是某个值的
[属性名!=值]---选取属性名不是某个值的
[属性名*=值]---选取属性值中包含某个值的
[属性名^=值]---选取属性名是以某个值开头的
[属性名$=值]---选取属性值以某个值结尾的jquery
3.内容过滤
:has(选择器)---开始与结束标记之间是否包含某类子元素,若是包含就选择出来。
:contains(字符串)---开始与结束标记之间是否包含某段文字,若是包含就选择出来。web
<title></title>
<script src="jquery-1.7.1.min.js"></script>
<script language="javascript">
$(document).ready(function(){
alert("hello world");
});//ready()事件,浏览器把页面的HTML加载完毕时触发
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
asdfghjkl
</div>
</form>
</body>
---显示文本并弹出hello world对话框
<title></title>
<script src="jquery-1.7.1.min.js"></script>
<script language="javascript">
alert("JS");
$(document).ready(function(){
alert("hello world");
});//ready()事件,浏览器把页面的HTML加载完毕时触发
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
asdfghjkl
</div>
</form>
</body>
---先弹出JS对话框,再显示文本和弹出hello world对话框
<title></title>
<script src="jquery-1.7.1.min.js"></script>
<script language="javascript">
//ready事件的触发时机:整个HTML文本在浏览器中加载完毕时触发
$(document).ready(function () {
$("#dd").click(function () {
alert("这是非侵入的JS");
});
});//ready()事件,浏览器把页面的HTML加载完毕时触发
</script>
</head>
<body>
<form id="form1" runat="server">
<div id="dd">
asdfghjkl
</div>
</form>
</body>
---显示文本,单击文本弹出"这是非侵入的JS"对话框
<title></title>
<script src="jquery-1.7.1.min.js"></script>
<script language="javascript">
//ready事件的触发时机:整个HTML文本在浏览器中加载完毕时触发
$(document).ready(function() {
$("#dd").click(function () {
alert("这是非侵入的JS");
}).mouseover(function () {
$(this).css("background-color", "blue");
}).mouseout(function () {
$(this).css("background-color", "green")
})
});//ready()事件,浏览器把页面的HTML加载完毕时触发
</script>
</head>
<body>
<form id="form1" runat="server">
<div id="dd">
asdfghjkl
</div>
</form>
</body>ajax
---鼠标移上文本时背景色变为蓝色,鼠标离开文本时背景色变为绿色
<title></title>
<script src="jquery-1.7.1.min.js"></script>
<script language="javascript">
//ready事件的触发时机:整个HTML文本在浏览器中加载完毕时触发
$(document).ready(function() {
$("#dd").click(function () {
alert("这是非侵入的JS");
}).mouseover(function () {
$(this).css("background-color", "blue").css("font-size",25px);
}).mouseout(function () {
$(this).css("background-color", "green")
})
});//ready()事件,浏览器把页面的HTML加载完毕时触发
</script>
</head>
<body>
<form id="form1" runat="server">
<div id="dd">
asdfghjkl
</div>
</form>
</body>sql
---鼠标移上文本时字体变大且背景色变为蓝色,鼠标离开文本时背景色变为绿色数据库
<title></title>
<script src="jquery-1.7.1.min.js"></script>
<script language="javascript">
//ready事件的触发时机:整个HTML文本在浏览器中加载完毕时触发
$(document).ready(function() {
$("div").click(function () {
alert("这是非侵入的JS");
}).mouseover(function () {
$(this).css("background-color", "blue").css("font-size","25px");
}).mouseout(function () {
$(this).css("background-color", "green")
})
});//ready()事件,浏览器把页面的HTML加载完毕时触发
</script>
</head>
<body>
<form id="form1" runat="server">
<div id="dd">
asdfghjkl
</div>
<div id="Div1">
asdfghjkl
</div>
<div id="Div2">
asdfghjkl
</div>
<div id="Div3">
asdfghjkl
</div>
</form>
</body>
---div里的每一项鼠标移到文本上时字体变大且背景色变为蓝色,鼠标离开文本时背景色变为绿色
<title></title>
<script src="jquery-1.7.1.min.js"></script>
<script language="javascript">
//ready事件的触发时机:整个HTML文本在浏览器中加载完毕时触发
$(document).ready(function() {
$(".tf").click(function () {
alert("这是非侵入的JS");
}).mouseover(function () {
$(this).css("background-color", "blue").css("font-size","25px");
}).mouseout(function () {
$(this).css("background-color", "green")
})
});//ready()事件,浏览器把页面的HTML加载完毕时触发
</script>
</head>
<body>
<form id="form1" runat="server">
<div id="dd">
asdfghjkl
</div>
<div id="Div1" class="tf">
asdfghjkl
</div>
<div id="Div2">
asdfghjkl
</div>
<div id="Div3" class="tf">
asdfghjkl
</div>
</form>
</body>
---div里class设置为tf的项字体变大且鼠标移到文本上时背景色变为蓝色,鼠标离开文本时背景色变为绿色浏览器
<title></title>
<script src="jquery-1.7.1.min.js"></script>
<script language="javascript">
//ready事件的触发时机:整个HTML文本在浏览器中加载完毕时触发
$(document).ready(function() {
$(".tf").click(function () {
alert("这是非侵入的JS");
}).mouseover(function () {
$(this).css("background-color", "blue").css("font-size","25px");
}).mouseout(function () {
$(this).css("background-color", "green")
})
});//ready()事件,浏览器把页面的HTML加载完毕时触发
</script>
</head>
<body>
<form id="form1" runat="server">
<div id="dd">
asdfghjkl
</div>
<div id="Div1" class="tf">
asdfghjkl
</div>
<div id="Div2">
asdfghjkl
</div>
<div id="Div3" class="tf">
asdfghjkl
</div>
<span class="tf">ghjklghjklghjkl</span>
</form>
</body>
---写入一个span,class也设为tf,全部class设置为tf的项鼠标移上文本是字体变大且背景色变为蓝色,鼠标离开文本时背景色变为绿色
<title></title>
<script src="jquery-1.7.1.min.js"></script>
<script language="javascript">
//ready事件的触发时机:整个HTML文本在浏览器中加载完毕时触发
$(document).ready(function() {
$("div.tf").click(function () {
alert("这是非侵入的JS");
}).mouseover(function () {
$(this).css("background-color", "blue").css("font-size","25px");
}).mouseout(function () {
$(this).css("background-color", "green")
})
});//ready()事件,浏览器把页面的HTML加载完毕时触发
</script>
</head>
<body>
<form id="form1" runat="server">
<div id="dd">
asdfghjkl
</div>
<div id="Div1" class="tf">
asdfghjkl
</div>
<div id="Div2">
asdfghjkl
</div>
<div id="Div3" class="tf">
asdfghjkl
</div>
<span class="tf">ghjklghjklghjkl</span>
</form>
</body>
---与上一步不一样,span字体不变大,背景色也不变
<title></title>
<script src="jquery-1.7.1.min.js"></script>
<script language="javascript">
//ready事件的触发时机:整个HTML文本在浏览器中加载完毕时触发
$(document).ready(function() {
$("div div").click(function () {
alert("这是非侵入的JS");
}).mouseover(function () {
$(this).css("background-color", "blue").css("font-size","25px");
}).mouseout(function () {
$(this).css("background-color", "green")
})
});//ready()事件,浏览器把页面的HTML加载完毕时触发
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<div id="dd">
asdfghjkl
<div>这是第三层div</div>
</div>
<div id="Div1" class="tf">
asdfghjkl
</div>
<div id="Div2">
asdfghjkl
</div>
<div id="Div3" class="tf">
asdfghjkl
</div>
<span class="tf">ghjklghjklghjkl
<div>这是第三层div</div>
</span>
</div>
</form>
</body>
---除span外全部div鼠标移上文本时字体变大且背景色变为蓝色,鼠标离开文本时背景色变为绿色
<title></title>
<script src="jquery-1.7.1.min.js"></script>
<script language="javascript">
//ready事件的触发时机:整个HTML文本在浏览器中加载完毕时触发
$(document).ready(function() {
$("div>div").click(function () {
alert("这是非侵入的JS");
}).mouseover(function () {
$(this).css("background-color", "blue").css("font-size","25px");
}).mouseout(function () {
$(this).css("background-color", "green")
})
});//ready()事件,浏览器把页面的HTML加载完毕时触发
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<div id="dd">
asdfghjkl
<div>这是第三层div</div>
</div>
<div id="Div1" class="tf">
asdfghjkl
</div>
<div id="Div2">
asdfghjkl
</div>
<div id="Div3" class="tf">
asdfghjkl
</div>
<span class="tf">ghjklghjklghjkl
<div>这是第三层div</div>
</span>
</div>
</form>
</body>
---span以前的全部div鼠标移上文本时字体变大且背景色变为蓝色,鼠标离开文本时背景色变为绿色
(二)DOM操做
1.操做元素自己---操做属性,操做样式,操做内容
(1)操做属性:
a.获取属性值:var s = xxx.attr("属性名");
b.添加属性:attr("属性名","属性值")
c.移除属性:removeAttr("属性名")
(2)操做样式:
1).操做样式的class选择器
addClass("class选择器的名")---添加样式
removeClass("class选择器的名")---移除样式
toggleClass("class选择器的名")---切换样式
2).操做内联样式
css("样式名")---得到样式值
css("样式名","样式值")---设置和替换样式
(3)操做内容
1)表单元素:
取值:var s = xxxx.val()
赋值:xxx.val("值")
2)非表单元素:
取值:var s = xxx.html(); var s = xxx.text();
赋值:xxx.html("值");xxx.text("值")
<textarea>dsfasdfasdf</textarea>
2.操做相关元素
找相关元素:父级元素、子级元素、兄弟元素(前一个、后一个)
操做相关元素:添加元素、复制元素、删除元素、替换元素
(三)事件与动画
1、事件
1.在JavaScript语法中的事件,把on...属性中的on去掉,就是JQuery中的事件。
onclick - click
ondblclick - dblclick
onmouseover - mouseover
onmouseout - mouseout
onfocus - focus
onblur - blur
onchange - change
onkeydown - keydown
onkeyup - keyup
onkeypress - keypress
2.特有事件:
hover(function(){},function(){}):至关于把mouseover和mouseout结合起来了
toggle(function(){},function(){},...function(){}):每点击一下执行下一个function,如执行到末尾,会再返回第一个执行
3.JQuery中的事件,须要事件的小括号中写function(){}
$("#Button1").click(function(){
//事件处理代码
});
案例:
1.光棒效果:mouseover,mouseout
2.展开面板:click
2、动画
hide(),show()
fadeIn(),fadeOut()
slideUp(),slideDown()
slideUp([毫秒数],[回调函数])
slideUp(3000,function(){xxx();})
<title></title>
<style type="text/css">
#aa{
padding:10px;
border:3px solid orange;
}
</style>
<script src="Scrpits/jquery-1.7.1.min.js"></script>
<script language="javascript">
$(document).ready(function(){
$("#aa").toggle(function () {
$(this).css("background-color", "blue");
}, function () {
$(this).css("background-color", "green");
}, function () {
$(this).css("background-color", "red");
});
});
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<span id="aa">注意这里面的颜色喔</span>
</div>
</form>
</body>
---浏览器页面中点击文本,背景色依次变化
<title></title>
<script src="Scrpits/jquery-1.7.1.min.js"></script>
<script language="javascript">
$(document).ready(function(){
$("#ff").click(function () {
hideDIV();
});
});
function showDIV(div) {
$("#ff").slideDown(3000,"hideDIV()");
}
function hideDIV(div) {
$("#ff").slideUp(3000);
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div id="ff" style="border:3px solid orange;background-color:blue;width:300px;height:300px">
</div>
</form>
</body>
---浏览器页面中单击图片,图片即逐渐收起且再也不展开
<title></title>
<script src="Scrpits/jquery-1.7.1.min.js"></script>
<script language="javascript">
$(document).ready(function(){
$("#ff").click(function () {
hideDIV();
});
});
function showDIV(div) {
$("#ff").slideDown(3000, function () { hideDIV();});
}
function hideDIV(div) {
$("#ff").slideUp(3000, function () { showDIV();});
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div id="ff" style="border:3px solid orange;background-color:green;width:300px;height:300px">
</div>
</form>
</body>
---浏览器页面中单击图片,图片先逐渐收起再逐渐展开且不断循环,时间间隔为3秒
<title></title>
<script src="Scrpits/jquery-1.7.1.min.js"></script>
<script language="javascript">
$(document).ready(function () {
$("#ff").click(function () {
$("#ff").animate({left:"400px",height:"400px"}, 3000);
});
});
</script>
</head>
<body>
<form id="form1" runat="server">
<div id="ff" style="border:3px solid orange;background-color:red;width:300px;height:300px">
</div>
</form>
</body>
---浏览器页面中单击图片,图片只纵向拉伸
<title></title>
<script src="Scrpits/jquery-1.7.1.min.js"></script>
<script language="javascript">
$(document).ready(function () {
$("#ff").click(function () {
$("#ff").animate({width:"400px",height:"400px"}, 3000);
});
});
</script>
</head>
<body>
<form id="form1" runat="server">
<div id="ff" style="border:3px solid orange;background-color:red;width:300px;height:300px">
</div>
</form>
</body>
---浏览器页面中单击图片,图片宽和高同时等比例拉伸
<title></title>
<script src="Scrpits/jquery-1.7.1.min.js"></script>
<script language="javascript">
$(document).ready(function () {
$("#ff").click(function () {
$("#ff").animate({ width: "400px" }, 3000).animate({height:"400px"},3000);
});
});
</script>
</head>
<body>
<form id="form1" runat="server">
<div id="ff" style="border:3px solid orange;background-color:pink;width:300px;height:300px">
</div>
</form>
</body>
---浏览器页面中单击图片,图片宽和高前后等比例拉伸
<title></title>
<script src="Scrpits/jquery-1.7.1.min.js"></script>
<script language="javascript">
$(document).ready(function () {
$("#ff").click(function () {
$("#ff").animate({left:"180px"},3000).animate({top:"180px"},3000).animate({ width: "400px" }, 3000).animate({height:"400px"},3000);
});
});
</script>
</head>
<body>
<form id="form1" runat="server">
<div id="ff" style="border:3px solid orange;background-color:purple;position:absolute;width:300px;height:300px">
</div>
</form>
</body>
---浏览器页面中单击图片,图片等比例像素移动后,宽和高前后等比例拉伸
{后面四个图片拉伸效果,若是animate里面width、height数值比div里面width、height数值小,则呈现图片收缩效果}
【DOM操做的一点补充】
操做相关元素:
里:children(),find("选择器")
外:parent(),parents("选择器")
下:next(),nextAll(选择器)
上:prev(),prevAll("选择器")
附加:集合操做
first(),last(),eq(n)
元素的添加、复制、替换、移除
添加:append(元素对象),prepend(元素对象),after(元素对象),before(元素对象)
复制:clone()
移除:
①清空:empty()---保留外围的元素,把子元素和内容全都清除掉
②移除:remove()---把元素全都删除
替换:
【Ajax的一点先导】
Ajax
---全称Asynchronous JavaScript and XML
---它不是某一种程序的简单操做,而是多种程序操做的集合体,包括HTML和CSS、DOM、JavaScript、XML和XSLT以及XMLHttpRequest
【使用JQuery实现Ajax效果】
1、结构:
两块代码:服务端代码,客户端代码(发请求以前的代码-主调代码,发请求以后的代码-回调代码)。
---通常来讲,咱们要先写服务端,再写客户端。客户端代码,先写主调,再写回调。
问题:如何解决跨语言的数据交换?---XML(可扩展的标记语言)
附加:XML语言
①是什么---文本格式数据载体
②语法注意:
1.标签自定义通常是双标签,单标签必定要以/>结尾---不像HTML标签那样严格,可自定义标签名
2.大小写敏感---必须注意大小写,不然会报错
3.只能有一个根元素
<?xml version="1.0"?>
<students>
<stu>
<code>tf001</code>
<name>蟹老板</name>
<age>15</age>
</stu>
<stu>
<code>tf002</code>
<name>海绵宝宝</name>
<age>13</age>
</stu>
<stu>
<code>tf003</code>
<name>派大星</name>
<age>13</age>
<works>
<work>
<firm>蟹老板的店</firm>
<status>前台接待</status>
</work>
<work>
<firm>蟹老板的店</firm>
<status>后厨学徒</status>
</work>
</works>
</stu>
<stu>
<s code="tf004" name="维尼" age="13"/>
</stu>
</students>
---双标签是标签中间加内容传数据,单标签是标签属性传数据,二者传输数据外在形式不一样
(一)服务端代码:
//第一步:获取传来的数据
//第二步:处理数据生成结果
//第三步:Response写入XML字符串
(二)客户端代码
$.ajax({
url:"要调用服务端的路径",
data:{key:value,key:value},
type:"POST",
dataType:"XML",
beforeSend:function(data){
//提交服务器以前触发,一般用来在这个地方显示加载动画
},
success:function(data){ //data表明服务端返回来的数据xml
//解析XML:解析服务端返回来的XML数据
//显示HTML:在页面上把解析出来的XML内容显示出来
},
error:function(data){
//服务器端执行出错
},
complete:function(data){
//无论成功仍是失败,总会走这里
}
});
举例:
1、返回简单数据
1.不须要提供请求数据
2.须要提供请求数据
2、返回复杂数据
1.不须要提供请求数据
2.须要提供请求数据
(一)返回对象
(二)返回集合
做业:使用Ajax实现数据删除
1、.ashx文件
1.获取要删除的主键值
2.执行删除
3.输出XML <?xml version='1.0'?><root>true</root>
2、.aspx文件
(一)HTML
使用Repeater显示数据
删除按钮可使用超连接来作(也可以使用button/submit),class="del"
(二)JQuery
给每一个删除按钮加上click事件。$(".del").click(function(){});
var tr = $(this).parents("tr"); //在主调中找到当前删聊按钮所在的行。
主调:在每一个click事件中,调用ajax向ashx发请求删除数据。
回调:解析返回xml文件,根返回true/false删除指向的table行。 注意:回调函数中不能用this
var isOK = $(data).find("root").text();
if(isOK == true)
{
$(tr).remove();
}
例1:时间显示
ashx代码界面:
public class Handler : IHttpHandler {
public void ProcessRequest (HttpContext context) {
//向客户端发送服务端的时间
string s="<?xml version='1.0'?>";
s += "<time>"+DateTime.Now.ToString("yyyy年MM月dd日hh时mm分ss秒")+"</time>";
context.Response.Write(s);
context.Response.End();
}
}
public bool IsReusable {
get {
return false;
}
}
aspx源界面:
<title></title>
<script language="javascript">
$(document).ready(function () {
$("#aa").click(function () {
$.ajax({
url: "Handler.ashx",
data: {},
type: "POST",
dataType: "XML",
success: function (data) {
//解析客户端返回的数据
var s = $(data).find("time").text();
//显示在客户端界面上
$("#Label1").html(s);
}//success
});//ajax
});//aa.click
});//ready
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="Label1" runat="server" Font-Bold="True" Font-Size="18pt" ForeColor="Green"></asp:Label>
<span id="aa">刷新时间</span>
</div>
</form>
</body>
---显示当前时间,需手动刷新时间
ashx代码界面:
public class Handler : IHttpHandler {
public void ProcessRequest (HttpContext context) {
//向客户端发送服务端的时间
string s="<?xml version='1.0'?>";
s += "<time>"+DateTime.Now.ToString("yyyy年MM月dd日hh时mm分ss秒")+"</time>";
context.Response.Write(s);
context.Response.End();
}
}
public bool IsReusable {
get {
return false;
}
}
aspx源界面:
<title></title>
<script language="javascript">
$(document).ready(function () {
showTime();
});//ready
function showTime() {
$.ajax({
url: "Handler.ashx",
data: {},
type: "POST",
dataType: "XML",
success: function (data) {
//解析客户端返回的数据
var s = $(data).find("time").text();
//显示在客户端界面上
$("#Label1").html(s);
}//success
});//ajax
window.setTimeout("showTime()", 1000);
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="Label1" runat="server" Font-Bold="True" Font-Size="18pt" ForeColor="Green"></asp:Label>
</div>
</form>
</body>
---自动刷新时间
例2:用户登陆注册
ashx代码界面:
using System;
using System.Web;
using System.Linq;
using System.Data.Linq;
public class CheckUserName : IHttpHandler {
private MyDBDataContext _Context = new MyDBDataContext();
public void ProcessRequest (HttpContext context) {
//获取用户名
string uid = context.Request["u"].ToString();
//到数据库检查数据
var query=_Context.Login.Where(p=>p.UserName==uid);
bool isOK=query.Count()==0?true:false;
//返回XML数据
string s = "<?xml version='1.0'?><ok>"+isOK+"</ok>";
context.Response.Write(s);
context.Response.End();
}
aspx源界面:
<title></title>
<script src="Scripts/jquery-1.7.1.min.js"></script>
<script language="javascript">
$(document).ready(function () {
//给UID加blur事件
$("#txtUID").blur(function () {
var s = $(this).val();//获取用户名
//向服务端发送请求并处理回调函数
$ajax({
url: "AjaxCode/CheckUserName.ashx",
data:{u:s},
type:"POST",
dataType: "XML",
success: function (data) {
//解析客户端返回数据
var ok = $(data).find("ok").text;
//显示在客户端界面上
if (ok == true) {
$("#lbl").html("该用户名可使用");
}
else {
$("#lbl").html("该用户名已存在");
}
}//success
});//ajax
});//blur
});//ready
</script>
</head>
<body>
<form id="form1" runat="server">
<h1>登陆</h1>
<div>
用户名:<asp:TextBox ID="txtUID" runat="server"></asp:TextBox>
<asp:Label ID="Label1" runat="server" Font-Bold="True" ForeColor="Blue" Text="lbl"></asp:Label>
<br />
密码:<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
<br />
确认密码:<asp:TextBox ID="TextBox3" runat="server"></asp:TextBox>
<br />
邮箱:
<asp:TextBox ID="TextBox4" runat="server"></asp:TextBox>
<br />
<asp:Button ID="Button1" runat="server" Text="Button" />
</div>
</form>
</body>
---用户登陆注册
例3:Ajax实现数据删除
aspx源界面:
<title></title>
<script src="Scripts/jquery-1.7.1.min.js"></script>
<script language="javascript">
$(document).ready(function(){
$(".del").click(function () {
//得到要删除的主键
var key = $(this).attr("aaa");
var tr=$(this).parents(".trcar");
//ajax请求删除
$.ajax({
url: "AjaxCode/DeleteCar.ashx"
data: { id: key },
type:"POST",
dataType: "XML",
success: funtion(data){
//解析xml数据
var ret=$(data).find("ok").text;
if(ret=="true"‖ret="True"){
//操做html界面
$(tr).remove();
}
}//success
});//ajax
//ajax回调删除
});//给del加click事件
});//ready
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Repeater ID="Repeater1" runat="server" OnItemCommand="Repeater1_ItemCommand">
<HeaderTemplate>
<table width="100%" border="1">
</HeaderTemplate>
<ItemTemplate>
<tr>
<td><%#Eval("Name") %></td>
<td><%#Eval("Price") %></td>
<td>
<a href="#" class="del" aaa="<%#Eval("Code") %>">删除</a>
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
</div>
</form>
</body>
aspx代码界面:
public partial class _Default : System.Web.UI.Page
{
private MyDBDataContext _Context = new MyDBDataContext();
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
Show();
}
}
private void Show()
{
var query = _Context.Car;
Repeater1.DataSource = query;
Repeater1.DataBind();
}
}
ashx代码界面:
public class DeleteCar : IHttpHandler {
private MyDBDataContext_Context=new MyDBDataContext();
public void ProcessRequest (HttpContext context) {
string s="";
//得到主键值
string code=context.Request["id"].ToString();
//删除
var query=_Context.Car.Where(p=>p.Code==code);
if(query.Count>0)
{
Car data=query.First();
_Context.Car.DeleteOnSubmit(data);
_Context.SubmitChanges();
s="true";
}
else
{
s="false";
}
//返回XML
context.Response.Write("<?xml.version='1.0'?><ok>"+s+"</ok>");
context.Response.End();
}
---Ajax实现数据删除
2015.8.25-2015.8.26
用户控件
1、是什么---自定义的反复重用的控件集合
2、使用用户控件的好处
1.代码重用
2.结构良好
3.分工开发
4.局部缓存
3、难点
(一)交换信息:
1.从页面向用户控件交换信息,代码写在页面中。
①用户控件名.FindControl("用户控件中的控件的ID")
TextBox textBox1 = WUC1.FindControl("TextBox1") as TextBox;
②事先在用户控件中定义public属性,经过属性为里面的控件赋值或取值。
用户控件中的代码:
public string TextValue
{
get
{
return TextBox1.Text;
}
set
{
TextBox1.Text = value;
}
}
页面中的代码:
WUC1.TextValue = txt.Text;
2.从用户控件向页面交换信息,代码要写在用户控件中。
①session
第一步:在用户控件的按钮中把数据放在Session中。
string x = TextBox1.Text;
Session["data"] = x;
第二步:在页面的OnLoadComplete事件中,从Session中取出数据来,显示在页面上。
protected override void OnLoadComplete(EventArgs e)
{
base.OnLoadComplete(e);
if (Session["data"] != null)
{
Label1.Text = Session["data"].ToString();
}
}
---若是只在Page_Load写if的部分,Label和TextBox的输入内容不能同步,输入Label的内容上传到TextBox会延迟,使用OnLoadComplete可以使Label和TextBox的输入内容同步
②代理、委托 delegate---指向方法(动做)的引用
类比:类的使用---指向对象的引用 Dog d=new Dog()
类的使用步骤:
第一步:用class 关键字定义一个类的类型
public class Dog
{
//成员变量定义
//成员属性定义
//成员方法定义
}
第二步:使用这个新的类型定义一个变量(类的变量)引用。
Dog d;
第三步:把这个变量引用指向一个新对象。
d = new Dog();
第四步:经过调用引用,实现对对象的调用。
d.Name
d.Bark()
代理的使用步骤:
第一步: 使用 delegate 定义一个新的代理类型。
public delegate 返回类型 代理类型名(参数定义);
例如:public delegate void ShowDelegate(string s);
第二步:使用新的代理类型定义一个变量(代理变量)
ShowDelegate Show;
第三步:把代理变量指向一个新的方法
Show = new ShowDelegate(方法名);
第四步:经过调用代理来实现对方法的调用。
Show("hello");
---代理的好处在于它在定义的时候就写好了成员变量、成员属性、成员方法,而类必须分别定义成员变量、成员属性、成员方法
事件---代理的一种特殊形式
1.代理所指向的方法,能够有返回值,事件所指向的方法必须是void返回类型。
2.实例化(挂函数的代码不同)
代理 UserList1.Show = new UserList1.Show(函数名);
事件 UserList1.Show += 函数名;
(二)路径:
1.控件路径:图片、超连接
使用服务端的控件,标准控件或者HTML标记加上"runat=server",这样服务端就会自动转换成正确的路径出来。
2.样式表中值的路径:background-image:url(路径)
不要使用内联样式,使用外部样式表来控制图片路径。
3.外部资源路径:用户控件中引入外部脚本文件
使用 string path = ResolveClientUrl("服务器端路径"); //返回的是客户端对应的路径
HTML代码:
<script src="<%= ShowScriptPath() %>" ></script>---注意:尖括号内是%=而不是%#
C#代码:
public string ShowScriptPath()
{
string path = "Scripts/JavaScript.js";
path = this.ResolveClientUrl(path);
return path;
}
4.C#代码的调用路径:使用应用程序路径的根来解决
Response.Redirect("页面");
Response.Redirect("~/Default.aspx");---注意:小括号内必定是绝对路径~/,而不是相对路径../
例:审批流过程
法一:(与法二使用的控件略有不一样)
【登陆界面】
aspx源界面:
<title></title>
</head>
<body>
<form id="form1" runat="server">
用户名:<asp:TextBox ID="txtUID" runat="server"></asp:TextBox>
<br />
密码:<asp:TextBox ID="txtPWD" runat="server"></asp:TextBox>
<br />
<asp:Button ID="btnLogin" runat="server" OnClick="btnLogin_Click" Text="登陆" />
</form>
</body>
aspx代码界面:
public partial class _Default : System.Web.UI.Page
{
private MyDBDataContext_Context = new MyDBDataContext();
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btnLogin_Click(object sender, EventArgs e)
{
var query=_Context.Emp.Where(p=>p.UserName==txtUID.Text&&p.password==txtPWD.Text);
if(query.Count()>0)
{
Session["user"]=txtUID.Text;
Response.Redirect("Main.aspx");
}
}
}
【主界面】
aspx源界面:
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:RadioButtonList ID="rblUsers" runat="server" RepeatDirection="Horizontal">
</asp:RadioButtonList>
<br />
<asp:Button ID="Button1" runat="server" Text="添加节点" OnClick="Button1_Click" />
<br />
<asp:Repeater ID="Repeater1" runat="server">
<ItemTemplate>
<div>
<%#Eval("EmpID") %>
<asp:ImageButton ID="ImageButton1" CommandArgument="<%#ShowKey() %>" OnClick="ImageButton1_Click" runat="server" ImageUrl="~/images/delete.png"/>
</div>
</ItemTemplate>
<SeparatorTemplate>
<asp:Image ID="Image1" ImageUrl="~/images/arrow.png" runat="server" />
</SeparatorTemplate>
</asp:Repeater>
</div>
<asp:Button ID="Button2" runat="server" Text="提交" />
</form>
</body>
aspx代码界面:
public partial class Main : System.Web.UI.Page
{
private MyDBDataConrtext_Context=new MyDBDataContext();
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
if(Session["list"]==null)
{
Response.Redirect("Default.aspx");
}
//加载人员列表数据
LoadEmp();
}
}
public string ShowKey()
{
return Eval("Code").ToString();
}
private void LoadEmp()
{
var query = _Context.Emp;
rblUsers.DataSource=query;
rblUsers.DataTextField="Name";
rblUsers.DataValueField="UserName";
rblUsers.DataBind();
}
protected void Button1_Click(object sender, EventArgs e)
{
//从集合中把session取出来
if(Session["list"]==null)
{
List<FlowPath>temp=new List<FlowPath>();
Session["list"]=temp;
}
List<FlowPath>list=Session["list"]as List<FlowPath>;
//找最大索引号
int maxOrders=0;
if(list.Count>0)
{
list=list.OrderByDescending(p=>p.Orders).ToString();
int maxOrder=list.First().Orders.Value;
}
maxOrder++;
//向session中添加对象
FlowPath data=new FlowPath();
data.Code=DateTime.Now.ToString("yyyyMMddhhmmss")+maxOrder.ToString()+Session["user"].ToString();
data.EmpId=rblUsers.SelectedValue;
data.Orders=maxOrder;
list.Add(data);
list=list.OrderBy(p=>p.Orders).ToList();
Session["list"]=list;
//页面显示
Repeater1.DataSource=list;
Repeater1.DataBind();
}
protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
{
//取出要删除项的主键值
ImageButton btn=sender as ImageButton;
string key=btn.CommandArgument.ToString();
//从session中删除对应项
if(Session["list"]=null)
{
List<FlowPath>list=Session["list"]as List<FlowPath>;
var query=list.Where(p=>p.Code==key);
if(query.Count()>0)
{
FlowPath data=query.First();
list.Remove(data);
Session["list"]=list;
Repeater1.DataSource=list;
Repeater1.DataBind();
}
}
}
}
【FlowPath代码界面】
public partial class FlowPath
{
private MyDBDataContext_Context=new MyDBDataContext();
public string Name
{
get
{
string empID=this.EmpId;
var query=_Context.Emp.Where(p=>p.UserName==empID);
if(query.Count()>0)
{
return query.First().Name;
}
return "";
}
}
}
法二:①使用session
【登陆界面】
aspx源界面:
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
用户名:<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<br />
密码:<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
<br />
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="登陆" />
</div>
</form>
</body>
aspx代码界面:
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
Session["user"] = TextBox1.Text;
Response.Redirect("~/Test/Main.aspx");
}
}
【主界面】
aspx源界面:
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<uc1:UserList ID="UserList1" runat="server" />
<uc2:NodesShow ID="NodesShow1" runat="server" />
</div>
</form>
</body>
aspx代码界面:
public partial class Main : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
UserList1.Show=new Test_UserList1.ShowDelegate(NodesShow1.ShowSession);
}
}
【主界面NodesShow界面】
aspx源界面:
<asp:Panel ID="Panel1" runat="server">
<asp:Repeater ID="Repeater1" runat="server" OnItemCommand="Repeater1_ItemCommand">
<HeaderTemplate>
<table width="300" border="0" align="center">
</HeaderTemplate>
<ItemTemplate>
<tr>
<td width="220"><%#Eval("Name") %></td>
<td width="44">
<asp:ImageButton ID="ImageButton1" OnClick="ImageButton1_Click" runat="server" CommandArgument="<%#SetKey() %>" ImageUrl="~/images/delete.png"/></td>
</tr>
</ItemTemplate>
<SeparatorTemplate>
<tr>
<td>
<asp:Image ID="Image1" runat="server" ImageUrl="~/images/arrow.png" /></td>
<td></td>
</tr>
</SeparatorTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
<br />
<asp:Button ID="btnSubmit" runat="server" Text="提交" OnClick="btnSubmit_Click" />
</asp:Panel>
aspx代码界面:
public partial class NodesShow : System.Web.UI.UserControl
{
private string SetKey()
{
return Eval("Code").ToString();
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
ShowSession();
}
}
private void ShowSession()
{
if (Session["list"] != null)
{
List<FlowPath>list=Session["list"]as List<FlowPath>;
Repeater1.DataSource = list;
Repeater1.DataBind();
}
}
protected void btnSubmit_Click(object sender, EventArgs e)
{
}
protected void ImageButton1_Click(object sender, EventArgs e)
{
//删除的代码
//1.获取要删除的主键
string key = (sender as ImageButton).CommandArgument.ToString();
//2.执行删除
if (Session["list"] != null)
{
List<FlowPath> list = Session["list"] as List<FlowPath>;
FlowPath data=list.Where(p => p.Code == key).First();
list.Remove(data);
Session["list"] = list;
}
//3.刷新
ShowSession();
}
}
【主界面UserList界面】
aspx源界面:
<asp:Panel ID="Panel1" runat="server" HorizontalAlign="Center">
<asp:Repeater ID="Repeater1" runat="server">
<ItemTemplate>
<input type="radio" name="rbusers" value="<%#Eval("UserName") %>"><%#Eval("Name") %>
</ItemTemplate>
</asp:Repeater>
<br/>
<asp:Button ID="btnAddNode" runat="server" Text="添加节点" OnClick="btnAddNode_Click" />
</asp:Panel>
aspx代码界面:
public partial class UserList : System.Web.UI.UserControl
{
//定义代理新类型
public delegate void ShowDelegate();
//使用代理类型定义代理变量
public ShowDelegate Show;
private MyDBDataContext_Context=new MyDBDataContext();
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
var query = _Context.Emp;
Repeater1.DataSource=query;
Repeater1.DataBind();
}
}
protected void btnAddNode_Click(object sender, EventArgs e)
{ //1、获取以前添加的人员列表
if(Session["list"]==null)
{
List<FlowPath>temp=new List<FlowPath>();
Session["list"]=temp;
}
List<FlowPath>list=Session["list"]as List<FlowPath>;
}
//2、添加选中人员
//1.计算人员排序号
list=list.OrderBy(p=>p.Orders).ToList();
int order=1;
if(list.Count>0)
{
order=list.Last().Orders.Value+1;
}
//2.生成节点对象
FlowPath data=new FlowPath();
data.Code=DateTime.Now.ToString("yyyyMMddhhmmss")+order+Session["user"].ToString();
data.EmpId=Request["rbusers"].ToString();
data.Orders=order;
//3.把对象添加到集合当中去
list.Add(data);
//4.把数据送到Session中保存
Session["list"]=list;
//3、从新绑定NodeShow中的Repeater
//从新调用
if(Show!=null)
{
Show();
}
}
【FlowPath代码界面】
public partial class FlowPath
{
public string Name
{
get
{
MyDBDataContext Context=new MyDBDataContext();
var query = context.Emp.Where(p => p.UserName == this.EmpId);
if (query.Count() > 0)
{
return query.First().Name;
}
return "";
}
}
}
法二:②不使用session,使用事件
其余部分不变
UserList代码:
public partial class UserList : System.Web.UI.UserControl
{
//定义代理新类型
public delegate void ShowDelegate();
//使用代理类型定义代理变量
public event ShowDelegate Show;---加event
private MyDBDataContext_Context=new MyDBDataContext();
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
var query = _Context.Emp;
Repeater1.DataSource=query;
Repeater1.DataBind();
}
}
protected void btnAddNode_Click(object sender, EventArgs e)
{ //1、获取以前添加的人员列表
if(Session["list"]==null)
{
List<FlowPath>temp=new List<FlowPath>();
Session["list"]=temp;
}
List<FlowPath>list=Session["list"]as List<FlowPath>;
}
//2、添加选中人员
//1.计算人员排序号
list=list.OrderBy(p=>p.Orders).ToList();
int order=1;
if(list.Count>0)
{
order=list.Last().Orders.Value+1;
}
//2.生成节点对象
FlowPath data=new FlowPath();
data.Code=DateTime.Now.ToString("yyyyMMddhhmmss")+order+Session["user"].ToString();
data.EmpId=Request["rbusers"].ToString();
data.Orders=order;
//3.把对象添加到集合当中去
list.Add(data);
//4.把数据送到Session中保存
Session["list"]=list;
//3、从新绑定NodeShow中的Repeater
//从新调用
if(Show!=null)
{
Show();
}
}
Main代码:
public partial class Main : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
UserList1.Show += NodesShow1.ShowSession;
}
}
2015.8.27
母版页MasterPage
---从粗到细,逐步细化各级页面的模板结构,首个母版页(也就是顶级母版页)编辑好后,在各级页面中只需编辑其不一样之处,相同之处都在各级母版页中自动生成。
ContentPlaceHoder---位置预留标记
Content---各级母版页(除了顶级,也就是每一个网站项目的首个母版页)实际内容存放位置,它与上一级母版页的ContentPlaceHoder是一一对应的,最后页面生成的时候,会把各级页面和母版一块儿编译生成一个用户界面。
思路:把母版页套进页面里来,不是拿着页面的东西放到母版页中去。母版页不是独立的,它是与用户控件一块儿来使页面结构更加优化。
两大难点:(与用户控件思路一致)
this.Master---当前页面的母版页
1、交换信息
(一)从页面操做母版页
1.FindControl()
2.事先在母版页中写好属性
(二)从母版页操做页面
1.session
2.代理
2、路径
1.控件路径:使用带有"runat=server"的标记或控件
2.背景路径:样式表的背景图片---外部样式表
3.资源路径:母版页中的外部样式表会自动转化路径,脚本文件不会自动转路径须要使用<%=方法名()%>和ResolveClientUrl()
4.C#代码路径 Response.Redirect("~/Admin/Default.aspx")
2015.8.31
【微软自带Ajax】
VS工具箱中AJAX控件:
ScriptManager---焦点管理器,只能有一个
UpdatePanel---刷新面板,能够有多个
UpdateProgress---刷新进度
Timer---计时器
UpdatePanel控件属性:
UpdateMode---Always(全部的同步刷新);Conditional(有条件刷新,可设置其中几个刷新,也可交叉刷新)
ChildrenAsTriggers---触发子元素刷新
Triggers---AsyncPostBackTrigger(异步刷新);PostBackTrigger(同步刷新)
【GridView】
GridView---表格化显示数据,但灵活度没有Repeater高
1、显示数据
1.代码绑定
2.数据源控件绑定
SqlDataSource,LinqDataSource,ObjectDataSource...
2、外观控制
1.控制总体
(1)自动套用格式
设置自动套用格式:GridView右上角智能菜单→"自动套用格式"
取消自动套用格式:GridView右上角智能菜单→"自动套用格式"→移除格式设置
(2)手动设置样式
GridView属性→"外观"/"样式"类别属性---调整总体外观风格
2.控制列
法一:Column属性
法二:GridView右上角智能菜单→"编辑列"
3.编辑行
GridView逐行建立、逐行绑定,建立完成触发RowCreated事件,绑定完成触发RowBound事件
e.Row.RowType.ToString()+"Create Over→"
e.Row.RowType.ToString()+"DataBind Over→"
---显示建立完成、绑定完成标记
if(e.Row.RowType==DataControlRowType.DataRow)
---显示建立完成、绑定完成标记(Header、Footer不显示)
RowDataBound事件:
if(e.Row.RowType=DataControlRowType.DataRow)
{
//取数据
e.Row.DataItem as
//改外观
e.Row.Cells[n].Text
}
2015.9.1
【LinqDataSource】
LinqDataSource右上角智能菜单→"启用删除"
RowDeleting(删除前触发)/RowDeleted(删除后触发)
e.Keys获取主键---前提:保证DataKeyNames有值
◎GridView删除
法一:使用超连接列(HyperLinkField)
1.设置Text,DataNavigateUrlFields,DataNavigateFormating
2.建ashx执行删除
法二:使用GridView删除列
若是没有外键,直接执行删除;
若是有外键,写RowDeleting、RowDeleted事件
//取主键
(1)确认GridView中DataKeyNames是否有值
(2)e.Keys[主键列表]
//执行删除
注意事务(★)
//刷新,阻止事件继续
GridView1.DataBind();
e.Cancel=true;
◎JS确认实现
法一:在RowDataBound事件中找到删除按钮,给删除按钮加OnClientClick事件
法二:使用JQuery的非侵入性实现确认---在编辑窗口属性设置"样式"类别中Control样式的CssClass,确保JQuery找到删除按钮
【MVC】
MVC---Model(模型)View(视图层)Control(控制层)
三个文件夹:Controllers(Controller是窗体固定后缀,命名窗体只更改Controller以前的部分),Views,Models
客户端请求的是控制器(Controller)的动做(Action)
视图的做用:事先把模板作好,用来给控制器的Action调用
例:审批流
【Default登陆源界面】
<title></title>
</head>
<body>
<form id="form1" runat="server">
<center><h1>登陆</h1> </center>
<div>
<center>
帐号:<asp:TextBox ID="TextBox1" runat="server" OnTextChanged="TextBox1_TextChanged"></asp:TextBox>
<br />
密码:<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
<br />
<asp:Button ID="Button1" runat="server" Text="Button" />
</center>
</div>
</form>
</body>
【Default登陆代码界面】
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Session["user"] = TextBox1.Text;
Response.Redirect("~/Main.aspx");
}
}
【Main源界面】
<title></title>
</head>
<body>
<form id="form1" runat="server">
<center><h1>流程管理及运转</h1></center>
<div>
<center>
<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="~/ShouWen.aspx">收文</asp:HyperLink>
<asp:HyperLink ID="HyperLink2" runat="server" NavigateUrl="~/FaWen.aspx">发文</asp:HyperLink>
</center>
</div>
</form>
</body>
【收文源界面】
<title></title>
</head>
<body>
<form id="form1" runat="server">
<center><h1>收文管理</h1></center>
<div>
<asp:Repeater ID="Repeater1" runat="server" OnItemCommand="Repeater1_ItemCommand">
<ItemTemplate>
<div>
<a target="_blank" href="ViewPaper.aspx?id=<%#Eval("PaperId") %>"><%#Eval("PaperId") %></a>
<asp:Button ID="btnAgree" CommandArgument="<%#SetKey() %>" OnClick="btnAgree_Click" runat="server" Text="经过" />
<asp:Button ID="btnDisAgree" runat="server" Text="拒绝" />
</div>
</ItemTemplate>
</asp:Repeater>
</div>
</form>
</body>
【收文代码界面】
public partial class ShouWen : System.Web.UI.Page
{
private MyDBDataContext_Context=new MyDBDataContext();
public string SetKey()
{
return Eval("PaperId").ToString();
}
protected void Page_Load(object sender, EventArgs e)
{
if(Session["user"]==null)
{
Response.Redirect("~/Default.aspx");
}
if(!IsPostBack)
{
var query=_Context.FlowRun.Where(p=>p.State=="1"&&p.EmpId==Session["user"].ToString());
Repeater1.DataSource=query;
Repeater1.DataBind();
}
}
protected void btnAgree_Click(object sender, EventArgs e)
{
//查出同流程审批人员,当前登陆审批人员状态设为2,下一审批人员状态设为1
string paperID=(sender as Button).CommandArgument.ToString();
List<FlowRun>list=_Context.FlowRun.Where(p=>p.PaperId==paperID).ToString();
for(int i=0;i<list.Count;i++)
{
if(list[i].EmpId==Session["user"].ToString()&&list[i].State="1")
{
list[i].State="2";
}
if(i<list.Count-1)
{
list[i+1].State="1";
}
}
_Context.SubmitChanges();
Show();
}
}
【发文源界面】
<title></title>
<script src="Scripts/jquery-1.7.1.min.js"></script>
<script language="javascript">
$(document).ready(function () {
$("btnNewFlow").click(function () {
window.open("XinJianLiuCheng.aspx", "_blank", "width=300 height=400 toolbar=no");
return false;
})//btnClick
})//ready
</script>
</head>
<body>
<form id="form1" runat="server">
<center><h1>发文管理</h1></center>
<div>
发文流程:<asp:DropDownList ID="ddlFlow" runat="server">
</asp:DropDownList>
<asp:Button ID="btnNewFlow" runat="server" Text="新建流程" />
<br />
选择公文:<asp:FileUpload ID="FileUpload1" runat="server" />
<br />
<asp:Button ID="Button1" runat="server" Text="提交审批" OnClick="Button1_Click" />
</div>
</form>
</body>
【发文代码界面】
public partial class FaWen : System.Web.UI.Page
{
private MyDBDataContext_Context=new MyDBDataContext();
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
FillFlow();
}
}
//加载流程列表
private void FillFlow()
{
var query = _Context.Flow.Where(p => p.EmpId == Session["user"].ToString());
ddlFlow.DataSource=query;
ddlFlow.DataTextField="Name";
ddlFlow.DataValueField="Code";
ddlFlow.DataBind();
}
protected void Button1_Click(object sender, EventArgs e)
{
//公文插入
paper data=new paper();
string paperKey=Guid.NewGuid.ToString();
data.Code=paperKey;
data.Content=FileUpload1.FileBytes;
data.EmpId=Session["user"].ToString();
data.Date=DateTime.Now;
_Context.paper.InsertOnSubmit(data);
_Context.SubmitChanges();
//加入人员到流程运转表中
string flowCode=ddlFlow.SelectedValue;
var query=_Context.FlowPath.Where(p=>p.FlowId==flowCode).OrderBy(p=>p.Orders);
int n=0;
foreach(FlowPath item in query)
{
//造一个FlowRun,向FlowRun中插入记录
FlowRun run=new FlowRun();
run.FlowId=item.FlowId;
run.EmpId=item.EmpId;
run.PaperId=paperKey;
run.State=(n==0?"1":"0");
_Context.FlowRun.InsertOnSubmit(run);
n++;
}
_Context.SubmitChanges();
}
}
【ViewPaper代码界面】
public partial class ViewPaper : System.Web.UI.Page
{
private MyDBDataContext_Context=new MyDBDataContext();
protected void Page_Load(object sender, EventArgs e)
{
Response.ContentType="Application/msword";
string paperID = Request["id"].ToString();
var query=_Context.paper.Where(p=>p.Code==paperID);
if(query.Count()>0)
{
paper data=query.First();
byte[] content=data.Content.ToArray();
Response.OutputStream.Write(content,0,content.Length);
Response.End();
}
}
}
【新建流程源界面】
<title></title>
</head>
<body>
<form id="form1" runat="server">
<h1>新建流程</h1>
<div>
<asp:RadioButtonList ID="rblUsers" runat="server" RepeatDirection="Horizontal" RepeatLayout="Flow">
</asp:RadioButtonList>
<br />
<asp:Button ID="btnAddNode" runat="server" Text="添加节点" OnClick="btnAddNode_Click" />
<br />
<asp:Repeater ID="Repeater1" runat="server" OnItemCommand="Repeater1_ItemCommand">
<ItemTemplate>
<div><%#Eval("EmpID") %><asp:Button ID="Button1" runat="server" Text="删除" /></div>
</ItemTemplate>
<SeparatorTemplate>
<div> </div>
</SeparatorTemplate>
</asp:Repeater>
</div>
<asp:Panel ID="Panel1" runat="server">
流程名称:<asp:TextBox ID="txtName" runat="server"></asp:TextBox>
<br />
<asp:Button ID="btnNext" runat="server" OnClick="btnNext_Click" Text="下一步" />
</asp:Panel>
<asp:Panel ID="Panel2" runat="server">
<asp:Repeater ID="Repeater2" runat="server">
<ItemTemplate>
<div>
<%#Eval("EmpID") %>
<asp:Button ID="Button2" runat="server" Text="删除" />
</div>
</ItemTemplate>
<SeparatorTemplate>
<div>
</div>
</SeparatorTemplate>
</asp:Repeater>
</asp:Panel>
<asp:Button ID="Button3" runat="server" OnClick="Button3_Click" Text="提交" />
<asp:Literal ID="Literal1" runat="server"></asp:Literal>
</form>
</body>
【新建流程代码界面】
public partial class XinJianLiuCheng : System.Web.UI.Page
{
private MyDBDataContext_Context=new MyDBDataContext();
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
FillUsers();
}
}
private void FillUsers()
{
var query = _Context.Emp;
rblUsers.DataSource = query;
rblUsers.DataTextField="Name";
rblUsers.DataValueField = "UserName";
rblUsers.DataBind();
}
protected void btnNext_Click(object sender, EventArgs e)
{
Panel2.Visible = true;
Panel1.Visible = !Panel2.Visible;
}
protected void btnAddNode_Click(object sender, EventArgs e)
{
if(Session["list"]==null)
{
List<FlowPath>temp=new List<FlowPath>();
Session["list"]=temp;
}
List<FlowPath>list=Session["list"] as List<FlowPath>;
//计算排序号
list=list.OrderBy(p=>p.Orders).ToList();
int order=1;
if(list.Count>0)
{
order=list.Last().Orders+1;
}
//向list中添加一个节点
FlowPath data=new FlowPath();
data.Code=DateTime.Now.ToString("yyyyMMddhhmmss")+Session["user"].ToString();
data.EmpId=rblUsers.SelectedValue;
data.Order=order;
list.Add(data);
Session["list"]=list;
//绑定显示
Repeater1.DataSource=list;
Repeater1.DataBind();
}
protected void Button3_Click(object sender, EventArgs e)
{
if(Session["list"]!=null)
{
string key=Guid.NewGuid.ToString();
Flow data=new Flow();
data.Code=key;
data.Name=txtName.Text;
data.EmpId=Session["user"].ToString();
_Context.Flow.InsertOnSubmit(data);
List<FlowPath>list=Session["list"] as List<FlowPath>;
foreach(FlowPath item in list)
{
item.FlowId=key;
}
_Context.FlowPath.InsertAllOnSubmit(list);
_Context.SubmitChanges();
//清除session,确保数据不覆盖
Session["list"]=null;
list.Clear();
Session["list"]=list;
//关闭当前窗口,刷新源窗口
Literal1.Text="<script>opener.location.reload();window.close();</script>";
}
}
}
2015.9.6
当前时间是:@DateTime.Now.ToString("yyyy年MM月dd日hh时mm分ss秒")
或
当前日期是:@DateTime.Now.ToString("yyyy年MM月dd日")
当前时间是:@DateTime.Now.ToString("hh时mm分ss秒")
或
当前日期:@DateTime.Now.ToString("yyyy年MM月dd日")
@if(DateTime.Now.Hour<12)
{
<text>上午</text>
}
else
{
@:下午
}
当前时间:@DateTime.Now.ToString("hh时mm分ss秒")
2015.9.9
【微软自带数据库登陆与验证】
1.配置数据库
aspnet_regsql
2.编写配置文件
<configuration>
<connectionStrings>
<add name="DefaultConnection" connectionString="server=.;database=mydb;uid=sa;pwd=123" providerName="System.Data.SqlClient"/>
</connectionStrings>
<system.web>
<profile defaultProvider="DefaultProfileProvider" >
<providers>
<add name="DefaultProfileProvider" type="System.Web.Providers.DefaultProfileProvider" connectionStringName="DefaultConnection" applicationName="/"/>
</providers>
</profile>
<membership defaultProvider="AspNetSqlMembershipProvider">
<providers>
<clear/>
<add
name="AspNetSqlMembershipProvider"
type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
connectionStringName="DefaultConnection"---链接字符串名
enablePasswordRetrieval="false"---是否容许找回密码
enablePasswordReset="true"---是否容许重置密码
requiresQuestionAndAnswer="false"---是否设置问题和答案
requiresUniqueEmail="true"---是否连接惟一邮箱
maxInvalidPasswordAttempts="3"---密码最多试错次数
minRequiredPasswordLength="6"---密码最小设置长度
minRequiredNonalphanumericCharacters="0"---(密码中)非字母字符最小个数
passwordAttemptWindow="10"
applicationName="/" />
</providers>
</membership>
<roleManager enabled="true" cacheRolesInCookie="true">
<providers>
<clear/>
<add connectionStringName="DefaultConnection" applicationName="/" name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</providers>
</roleManager>
<compilation debug="false" targetFramework="4.0" />
</system.web>
</configuration>
3.作界面
4.写代码
a. 导入命名空间:using System.Web.Security;
b.MembersShip类,MemberShipUser类
功能:
(1)添加用户
(2)登陆验证
(3)全部用户的显示
(4)根据用户名查找用户对象
(5)设置用户是否可用
添加用户:
Membership.CreateUser(txtUID.Text, txtPWD1.Text, txtEmail.Text);---基本参数
MembershipCreateStatus state;
Membership.CreateUser(txtUID.Text, txtPWD1.Text, txtEmail.Text,txtQuestion.Text,txtAnswer.Text,false,out state);---完整参数
MembershipCreateStatus state;
Membership.CreateUser(txtUID.Text, txtPWD1.Text, txtEmail.Text,txtQuestion.Text,txtAnswer.Text,false,out state);
if (state == MembershipCreateStatus.Success)
{
Literal1.Text = "用户建立成功";
}
配合SQLServer使用,dbo.aspnet_Membership表右键"编辑前200行",单击"执行"便可看到注册成功的新数据
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
MembershipUserCollection muc = Membership.GetAllUsers();
GridView1.DataSource = muc;
GridView1.DataBind();
}
}
在浏览器中运行便可显示全部用户数据
【用户登陆验证完整代码】
【建立代码】
protected void btnRegister_Click(object sender, EventArgs e)
{
MembershipCreateStatus state;
Membership.CreateUser(txtUID.Text, txtPWD1.Text, txtEmail.Text,txtQuestion.Text,txtAnswer.Text,false,out state);
if (state == MembershipCreateStatus.Success)
{
Literal1.Text = "用户建立成功";
}
}
【建立源】
<title></title>
</head>
<body>
<form id="form1" runat="server">
<h2>建立用户</h2>
<div>
用户名:<asp:TextBox ID="txtUID" runat="server"></asp:TextBox>
<br />
密码:<asp:TextBox ID="txtPWD1" runat="server"></asp:TextBox>
<br />
确认密码:<asp:TextBox ID="txtPWD2" runat="server" Height="16px"></asp:TextBox>
<br />
邮箱:<asp:TextBox ID="txtEmail" runat="server"></asp:TextBox>
<br />
问题:<asp:TextBox ID="txtQuestion" runat="server"></asp:TextBox>
<br />
答案:<asp:TextBox ID="txtAnswer" runat="server"></asp:TextBox>
<br />
<asp:Button ID="btnRegister" runat="server" Text="注册" OnClick="btnRegister_Click" />
<br />
<asp:Literal ID="Literal1" runat="server"></asp:Literal>
</div>
</form>
</body>
【显示代码】
using System.Web.Security;
public partial class XianShiYongHu : System.Web.UI.Page
{
public string SetKey()
{
return Eval("UserName").ToString();
}
public string ShowApproved()
{
bool isapproved = (bool)Eval("ShowApproved");
return isapproved?"点击禁用":"点击启用";
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
ShowUsers();---private void ShowUsers代码部分的提取方法
}
}
private void ShowUsers()---!IsPostBack右键提取方法生成
{
MembershipUserCollection muc = Membership.GetAllUsers();
GridView1.DataSource = muc;
GridView1.DataBind();
}---!IsPostBack右键提取方法生成
protected void btnApproved_Click(object sender, EventArgs e)
{
Button btn = sender as Button;
string key = btn.CommandArgument.ToString();//主键(用户名)
MembershipUser user=Membership.GetUser(key);//数据库中找到人员对象
user.IsApproved = !user.IsApproved;//修改人员对象状态
Membership.UpdateUser(user);//数据库中更新user对象
ShowUsers();
}
}
【显示源】
<title></title>
</head>
<body>
<form id="form1" runat="server">
<h2>显示全部用户</h2>
<div>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" BackColor="White" BorderColor="White" BorderStyle="Ridge" BorderWidth="2px" CellPadding="3" CellSpacing="1" GridLines="None" HorizontalAlign="Center" Width="100%">
<Columns>
<asp:BoundField DataField="UserName" HeaderText="用户名" />
<asp:BoundField DataField="Email" HeaderText="邮箱" />
<asp:BoundField DataField="PasswordQuestion" HeaderText="问题" />
<asp:TemplateField HeaderText="是否启用">
<ItemTemplate>
<asp:Button ID="btnApproved" runat="server" Text="<%#ShowApproved() %>" CommandArgument="<%#SetKey() %>" OnClick="btnApproved_Click" />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="IsLockedOut" HeaderText="是否锁定" />
</Columns>
<FooterStyle BackColor="#C6C3C6" ForeColor="Black" />
<HeaderStyle BackColor="#4A3C8C" Font-Bold="True" ForeColor="#E7E7FF" />
<PagerStyle BackColor="#C6C3C6" ForeColor="Black" HorizontalAlign="Right" />
<RowStyle BackColor="#DEDFDE" ForeColor="Black" />
<SelectedRowStyle BackColor="#9471DE" Font-Bold="True" ForeColor="White" />
<SortedAscendingCellStyle BackColor="#F1F1F1" />
<SortedAscendingHeaderStyle BackColor="#594B9C" />
<SortedDescendingCellStyle BackColor="#CAC9C9" />
<SortedDescendingHeaderStyle BackColor="#33276A" />
</asp:GridView>
</div>
</form>
</body>
【登陆代码】
using System.Web.Security;
public partial class DengLu : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
bool isOK = Membership.ValidateUser(txtUID.Text, txtPWD.Text);
if (isOK == true)
{
Response.Redirect("XianShiYongHu.aspx");
}
}
}
【登陆源】
<title></title>
</head>
<body>
<form id="form1" runat="server">
<h2>登陆</h2>
<div>
用户名:<asp:TextBox ID="txtUID" runat="server"></asp:TextBox>
<br />
密码:<asp:TextBox ID="txtPWD" runat="server"></asp:TextBox>
<br />
<asp:Button ID="Button1" runat="server" Text="登陆" OnClick="Button1_Click" />
</div>
</form>
</body>
【用户登陆验证添加修改】
【建立源】
<title></title>
</head>
<body>
<form id="form1" runat="server">
<h2>建立用户</h2>
<div>
用户名:<asp:TextBox ID="txtUID" runat="server"></asp:TextBox>
<br />
密码:<asp:TextBox ID="txtPWD1" runat="server"></asp:TextBox>
<br />
确认密码:<asp:TextBox ID="txtPWD2" runat="server" Height="16px"></asp:TextBox>
<br />
邮箱:<asp:TextBox ID="txtEmail" runat="server"></asp:TextBox>
<br />
问题:<asp:TextBox ID="txtQuestion" runat="server"></asp:TextBox>
<br />
答案:<asp:TextBox ID="txtAnswer" runat="server"></asp:TextBox>
<br />
<asp:Button ID="btnRegister" runat="server" Text="注册" OnClick="btnRegister_Click" />
<br />
<asp:Literal ID="Literal1" runat="server"></asp:Literal>
</div>
</form>
</body>
【建立代码】
using System.Web.Security;
public partial class ChuangJianYongHu : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btnRegister_Click(object sender, EventArgs e)
{
MembershipCreateStatus state;
Membership.CreateUser(txtUID.Text, txtPWD1.Text, txtEmail.Text,txtQuestion.Text,txtAnswer.Text,false,out state);
if (state == MembershipCreateStatus.Success)
{
Literal1.Text = "用户建立成功";
}
}
}
【显示源】
<title></title>
</head>
<body>
<form id="form1" runat="server">
<h2>显示全部用户</h2>
<div>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" BackColor="White" BorderColor="White" BorderStyle="Ridge" BorderWidth="2px" CellPadding="3" CellSpacing="1" GridLines="None" HorizontalAlign="Center" Width="100%" Font-Size="15px" OnRowDeleting="GridView1_RowDeleting">
<Columns>
<asp:BoundField DataField="UserName" HeaderText="用户名" />
<asp:BoundField DataField="Email" HeaderText="邮箱" />
<asp:BoundField DataField="PasswordQuestion" HeaderText="问题" />
<asp:TemplateField HeaderText="是否启用">
<ItemTemplate>
<asp:Button ID="btnApproved" runat="server" Text="<%#ShowApproved() %>" CommandArgument="<%#SetKey() %>" OnClick="btnApproved_Click" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="锁定状态">
<ItemTemplate>
<asp:Label ID="lblUnlock" runat="server" Visible="<%#ShowLockState() %>" Text="正常状态"></asp:Label>
<asp:Button ID="btnUnlock" runat="server" Visible="<%#!ShowLockState() %>" CommandArgument="<%#SetKey() %>" OnClick="btnUnlock_Click" Text="点击解锁" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField ShowHeader="False">
<ItemTemplate>
<asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False" CommandArgument="<%#SetKey() %>" OnClick="LinkButton1_Click" Text="删除"></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
<asp:CommandField ShowDeleteButton="True" />
</Columns>
<FooterStyle BackColor="#C6C3C6" ForeColor="Black" />
<HeaderStyle BackColor="#4A3C8C" Font-Bold="True" ForeColor="#E7E7FF" />
<PagerStyle BackColor="#C6C3C6" ForeColor="Black" HorizontalAlign="Right" />
<RowStyle BackColor="#DEDFDE" ForeColor="Black" />
<SelectedRowStyle BackColor="#9471DE" Font-Bold="True" ForeColor="White" />
<SortedAscendingCellStyle BackColor="#F1F1F1" />
<SortedAscendingHeaderStyle BackColor="#594B9C" />
<SortedDescendingCellStyle BackColor="#CAC9C9" />
<SortedDescendingHeaderStyle BackColor="#33276A" />
</asp:GridView>
</div>
</form>
</body>
【显示代码】
using System.Web.Security;
public partial class XianShiYongHu : System.Web.UI.Page
{
public bool ShowLockState()
{
bool isLocked=(bool)Eval("IsLockedOut");
return !isLocked;//返回true即锁定状态,返回false即解锁状态
}
public string SetKey()
{
return Eval("UserName").ToString();
}
public string ShowApproved()
{
bool isapproved = (bool)Eval("ShowApproved");
return isapproved?"点击禁用":"点击启用";
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
ShowUsers();
}
}
private void ShowUsers()
{
MembershipUserCollection muc = Membership.GetAllUsers();
GridView1.DataSource = muc;
GridView1.DataBind();
}
protected void btnApproved_Click(object sender, EventArgs e)
{
Button btn = sender as Button;
string key = btn.CommandArgument.ToString();//主键(用户名)
MembershipUser user=Membership.GetUser(key);//数据库中找到人员对象
user.IsApproved = !user.IsApproved;//修改人员对象状态
Membership.UpdateUser(user);//数据库中更新user对象
ShowUsers();
}
protected void btnUnlock_Click(object sender, EventArgs e)
{
Button btn = sender as Button;
//取主键
string key = btn.CommandArgument.ToString();
//解锁
MembershipUser user = Membership.GetUser(key);
user.UnlockUser();
//刷新
ShowUsers();
}
protected void LinkButton1_Click(object sender, EventArgs e)
{
LinkButton btn = sender as LinkButton;
//取主键
string key=btn.CommandArgument.ToString();
//删除
Membership.DeleteUser(key);
//刷新
ShowUsers();
}
protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
//取主键
string key = e.Keys["UserName"].ToString();
//删除
Membership.DeleteUser(key);
//刷新
ShowUsers();
}
}
【登陆源】
<title></title>
</head>
<body>
<form id="form1" runat="server">
<h2>登陆</h2>
<div>
用户名:<asp:TextBox ID="txtUID" runat="server"></asp:TextBox>
<br />
密码:<asp:TextBox ID="txtPWD" runat="server"></asp:TextBox>
<br />
<asp:Button ID="Button1" runat="server" Text="登陆" OnClick="Button1_Click" />
</div>
</form>
</body>
【登陆代码】
using System.Web.Security;
public partial class DengLu : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
bool isOK = Membership.ValidateUser(txtUID.Text, txtPWD.Text);
if (isOK == true)
{
Response.Redirect("XianShiYongHu.aspx");
}
}
}
【角色管理源】
<title></title>
</head>
<body>
<form id="form1" runat="server">
<h2>角色管理</h2>
<div>
<asp:ListBox ID="ListBox1" runat="server" Height="162px" Width="192px"></asp:ListBox>
</div>
<div>
角色名:<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<br />
<asp:Button ID="txtRoleID" runat="server" OnClick="Button1_Click" Text="添加" />
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click1" Text="删除" />
</div>
</form>
</body>
【角色管理代码】
using System.Web.Security;
public partial class JueSeGuanLi : System.Web.UI.Page
{
private void ShowRoles()
{
ListBox1.Items.Clear();
string[]roles=Roles.GetAllRoles();
foreach (string role in roles)
{
ListBox1.Items.Add(role);
}
}
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
ShowRoles();
}
}
protected void Button1_Click(object sender, EventArgs e)
{
if (Roles.RoleExists(txtRoleID.Text =false))
{
Roles.CreateRole(txtRoleID.Text);
ShowRoles();
}
}
protected void Button1_Click1(object sender, EventArgs e)
{
if (TextBox1.SelectedIndex >= 0)
{
string name = ListBox1.SelectedValue;
Roles.DeleteRole(name);
ShowRoles();
}
}
}
【角色和人员源】
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
角色:<asp:DropDownList ID="ddl" runat="server" AutoPostBack="True">
</asp:DropDownList>
<br />
人员:<asp:CheckBoxList ID="cbl" runat="server">
</asp:CheckBoxList>
<br />
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="肯定" />
</div>
</form>
</body>
【角色和人员代码】
using System.Web.Security;
public partial class _Default : System.Web.UI.Page
{
private void FillRoles()
{
ddl.Items.Clear();
string[] roles=Roles.GetAllRoles();
foreach(string role in roles)
{
ddl.Items.Add(role);
}
}
private void FillUsers()
{
MembershipUserCollection muc=Membership.GetAllUsers();
cbl.DataSource = muc;
cbl.DataTextField = "UserName";
cbl.DataValueField = "UserName";
cbl.DataBind();
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
FillRoles();
FillUsers();
LoadUserForRole();
}
}
protected void Button1_Click(object sender, EventArgs e)
{
//取出选中角色
string role = ddl.SelectedValue;
//取出选中用户
List<string> users = new List<string>();
foreach (ListItem li in cbl.Items)
{
if (li.Selected == true)
{
users.Add(li.Value);
}
}
//进行匹配
//所有删除
//1.找到当前角色中用户
string[] YuanYouYongHu = Roles.GetUsersInRole(role);
//2.删除用户的当前角色
if (YuanYouYongHu.Length > 0)
{
Roles.RemoveUsersFromRole(YuanYouYongHu, role);
}
//所有加载
Roles.AddUsersToRole(users.ToArray(),role);
}
protected void ddl_SelectedIndexChanged(object sender, EventArgs e)
{
LoadUserForRole();
}
private void LoadUserForRole()
{
cbl.SelectedIndex = -1;
string key = ddl.SelectedValue;
//找角色的用户
string[] users = Roles.GetUsersInRole(key);
//在界面勾选角色
foreach (ListItem li in cbl.Items)
{
if (users.Contains(li.Value))//模糊查询
{
li.Selected = true;
}
}
}
}
2015.9.14-9.15
【WPF入门】
几个属性:
可经过代码也可经过属性修改窗体标题、大小
Content-文字内容
FontSize-字体大小
FontWeight(Normal)-普通大小
FontWeight(Bold)-字体加粗
Margin-文字距窗体边界边距
HorizontalAlignment-水平对齐
VerticalAlignment-竖直对齐
ResizeMode(窗体)调整模式
CanResize-可调
CanMinimize-可最小化(最大化按钮不可用)
NoRisize-不可调
CanResizeWithGrip-可调(右下角有角标,示意窗体大小可调)
TopMost-窗体置顶(打开多个页面时,窗体总在最上)
WindowStartupLocation窗体初始位置
Manual-手动
CenterScreen-居中
WindowState窗体状态
Normal-普通大小
Maximized-启动即窗体最大化
WindowStyle窗体样式
None-没边框
SingleBorderWindow-普通平面边框
ThreeDBorderWindow-3D立体边框
ToolWindow-只有关闭按钮的窗体模式
面板(Panel)
StackPanel栈面板
Orientation-按钮对齐方式 Horizontal-水平对齐方式 Vertical-竖直对齐方式
拖进一个Button:
Margin="10" Button到四周边距等距
Margin="10,5" 第一个数字表明Button到左右两边边距,第二个数字表明Button到上下两边边距
Margin="10,5,10,5" 四个数字分别表明Button到"左、上、右、下"的距离(与网页Margin设置不一样,网页是"上、右、下、左")
WrapPanel环绕面板
Button可随窗体大小自动调整排列方式
DockPanel停靠面板
窗体内元素贴边排列
Canvas画布
可精肯定位元素
Grid网格面板
UniformGrid均布网格
2015.9.19
dictioanry表内排序
protected void Button1_Click(object sender, EventArgs e)
{
Dictionary<int, string> dics = new Dictionary<int, string>();
dics.Add(1,"aaaa");
dics.Add(5,"bbbb");
dics.Add(3,"cccc");
dics.Add(2,"dddd");
dics.Add(4,"eeee");
dics=dics.OrderBy(p=>p.Key).ToDictionary(p=>p.Key,p=>p.Value);
foreach (KeyValuePair<int, string> item in dics)
{
Response.Write(item.Key+"---"+item.Value);
Response.Write("<br>");
}
}
序列化:内存对象--->流
反序列化:流--->内存中的对象
1.命名空间:
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
2.类:
FileStream
SerializeFormatter
3.方法:
Serilize()
Deserilize()
【例】
Student类代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
[Serializable]
public class Student
{
public string Name;
public bool Sex;
public string Nation;
public DateTime Birthday;
public string Speak()
{
return Name + Sex + Nation + Birthday;
}
}
新建窗体,拖拽按钮进去
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Runtime.Serialization.Formatters.Binary;//序列化命名空间
using System.IO;//流命名空间
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
//1、造对象
Student s = new Student();
s.Name = "流冰";
s.Sex = true;
s.Nation = "汉族";
s.Birthday = new DateTime(2015,9,3);
//2、把对象放到流中去
//1.准备流放置对象
string filePath = Server.MapPath("saves/" + DateTime.Now.ToString("yyyyMMddhhmmss") + ".txt");
FileStream fs = new FileStream(filePath,FileMode.OpenOrCreate);
//2.进行序列化
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(fs, s);
//3.关闭流
fs.Close();
}
protected void Button2_Click(object sender, EventArgs e)
{
//准备流放置对象
string filePath = Server.MapPath("saves/20150920060036.txt");
FileStream fs = new FileStream(filePath, FileMode.Open);
//从流里面反序列化成对象
BinaryFormatter bf = new BinaryFormatter();
Student s = bf.Deserialize(fs) as Student;
//关闭流
fs.Close();
this.Title = s.Speak();
}
}
2015.9.21
【ASPCMS】
文件名后缀.asa-access数据库文件