ASP.NET 2.0客户端回调的实现分析
--------------------------------------------------------------------------------
http://www.sina.com.cn 2006年04月20日 15:22 天极yesky
作者:轩辕南宫
开发人员使用JavaScript的一个主要原因就是可以避免回发过程中带来的页面刷新。例如我们可以根据用户的需要使用Treeview控件来展开和折叠相应的数据节点。当你展开一个节点时,该Treeview控件将会利用JavaScript读取服务器上的子节点信息,然后平滑无刷新地插入这些新节点。如果没有使用JavaScript的话,Treeview控件将会因为页面的回发而重新构建。不但用户会发现因页面刷新而带来的延迟,而且页面极有可能回复到原来的状态,即丢失前面所展开的那些子节点信息。对于服务器端来说,因为每次回发的过程中都要处理大量的视图状态(View
State)信息,这也会严重影响程序的整体执行性能。
以前我们使用的JavaScript示例几乎都是自包含的,即它们通常是为了完成一些特殊的显示效果(例如弹出一个新的页面窗
利用CSS與DIV做出固定Header與Footer的Datagrid
--------------------------------------------------------------------------------
如何做出固定Header與Footer的Datagrid ?在網路上有好多的文章都提到如何做出固定表頭(Fixed
Header)的Datagrid,但是固定表尾的部份,我花了好些時間卻找不到現成的範例.後來經過多方嘗試後,終於有些結果.在此分享給小舖裡的同好,希望對大家有所幫助.
如何讓Datagrid有Scrollbar?我看過最簡單的方法就是先將Datagrid先放置在一個DIV之中,這樣Datagrid就可以有Scroll的效果.但是這個方法在Scroll的時候,表頭也會跟著往上捲.因此有人提出了一個聰明的方法,就是用CSS的方式將表頭固定.由於該方法非常簡單明瞭,且不需要另外撰寫程式,因此個人覺得是解決這個問題相當好的方法.這裡有詳細的方法與範例可供參考.
但是在該篇文章中也有人問到如何利用同樣的方法固定表尾(Footer),可惜沒人回答,而我找了些Internet上面的資料,幾乎沒有看到利用CSS來固定表尾的方法,因此便嘗試自己做做看.經過一番嘗試後,終於做出結果.以下將相關資料整理敘述.
如何做出可以Scroll,且表頭表尾固定
多個專案共用Session(2006-12-23 08:19)
多個專案共用Session
在設計Portal的時候,遇到了這樣的問題
從Portal登入之後的Session, 傳到了另一個Web App之後, 就無法讓該Web App使用
導致要重覆登入的狀況
假設有三個Web App
-Portal
-Authorize
-CheckIn
使用者登入Portal之後,能夠透過Portal的選單直接連到Authorize與CheckIn的兩個Web App工作
解決的辦法如下...
1.先分別將這三個Web App編譯完成
2.在Portal的虛擬目錄下,分別將Authorize與CheckIn這兩個Web
App的虛擬目錄加入至Portal的虛擬目錄下
也就是說,在IIS中會變成這樣
+Portal
+-Authorize
+-CheckIn
3.將Authorize與CheckIn這兩個bin資料夾下的dll, 全部copy一份到Portal之下的bin資料夾
4.刪除Authorize與CheckIn這兩個資料夾下的web.config與Golbal.asax
5.將Portal/Authorize與Portal/CheckIn這兩個虛擬目錄資料夾的應用程式名稱移除,使之成為一般的Web
App資料夾
此後只要登入到Portal之後的Sess
注意:这里说的delete是指不带where子句的delete语句
相同点
truncate和不带where子句的delete, 以及drop都会删除表内的数据
不同点:
1. truncate和 delete只删除数据不删除表的结构(定义)
drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index);
依赖于该表的存储过程/函数将保留,但是变为invalid状态.
2.delete语句是dml,这个操作会放到rollback
segement中,事务提交之后才生效;如果有相应的trigger,执行的时候将被触发.
truncate,drop是ddl, 操作立即生效,原数据不放到rollback segment中,不能回滚.
操作不触发trigger.
3.delete语句不影响表所占用的extent, 高水线(high watermark)保持原位置不动
显然drop语句将表所占用的空间全部释放
truncate 语句缺省情况下见空间释放到 minextents个 extent,除非使用reuse storage;
truncate会将高水线复位(回到最开始).
4.速度,一般来说: drop> truncate > delete
5.安全性:小心使
/// <summary>
/// 方法GenerateGetPosScript用于生成一段Javascript代码,其作用是为菜单定位
/// </summary>
/// <returns></returns>
private string GenerateGetPosScript()
{
string getPosScript;
getPosScript = '<script language=\'JavaScript\'>\n';
getPosScript = getPosScript + 'function getPos(el,sProp)
{\n';
getPosScript = getPosScript + '\tvar iPos = 0\n';
getPosScript = getPosScript + '\tel = el.offsetParent;\n';
getPosScript = getPosScript + '\twhile (el!=null) {\n';
getPosScript = getPosScript + '\t\tiPos+=el[\'offset\' +
sProp]\n';
getPosScript = getPosScript + '\t\tel =
el.offsetParent\n}\n\treturn iPos;}\n';
/// <summary>
/// 方法GenerateScript用于生成Javascript代码,不使用任何变量或参数
/// </summary>
/// <returns></returns>
private string GenerateScript()
{
string tempScript;
tempScript = '\n<SCRIPT LANGUAGE=\'JavaScript\'>\n';
tempScript = tempScript +
'<!----------------------------------------------------------\n';
tempScript = tempScript + '//此处为控件CashMenu的客户端代码\n';
tempScript = tempScript + '//Cash版权所有
有问题请致电邮cashcao@msn.com\n';
tempScript = tempScript + '//版本号:beta1\n';
tempScript = tempScript + '//2003年1月7日\n';
tempScript = tempScript + 'menuPrefix = 'menu';\n';
上一章我们写了一个最简单的自定义控件,此次让我们抛开理论,实际开发一个具有实用意义的自定义控件:一个可以设置权限的菜单。
在这个项目中我们将不采用任何未学到的理论知识,用户只需要具有基本的DHTML知识就可以。如你所知,服务器控件不过是对一些HTML及Javascript的封装罢了。至于其它的技巧,将来我们会逐渐提及并应用,最终生产出具有商业水准的控件来。
制作这个控件的思路很简单:首先使用DHTML写出一个菜单来,然后把其中的属性提取出来,接着封装起脚本与HTML显示代码,最后将其作为参数重写Render方法。你看,就这么简单。
如果不想透过浏览器阅读代码(那实在很讨厌),你可以到如下地址下载这个项目的源码,其中包括这个自定义控件的源代码及各类测试文件:不同的数据源以及权限设定。
http://user1.7host.com/cashtsao//CashMenu0110.zip
首先在名称空间CashControls中声明一个枚举类型MainMenuAlign:
public enum MainMenuAlign
学习自定义控件的开发不仅可以使你开发出更灵活的系统更重要的是它可以使你加深对已有服务器控件的理解,得以更灵活的应用。
较之于asp,asp.net提供了更强大的功能,我比较喜欢它的代码分离技术和对诸如C#、VB.Net等强类型语言的使用,这是从开发者的角度来看的,从用户的角度来看,会觉得它速度更快,运行更稳定,安全性也更高。不管怎么说,新技术的产生总会使许多人感到高兴,不过对开发者来说,坏消息是他们需要学习更多新的知识。
Asp.net有了很多的改变,比如你可能会发现供我们操作的元素也和以前有了很大的不同,原来标准的HTML元素变成了现在的服务器控件,所谓服务器控件,就是在服务器上运行,并可以映射到所有浏览器支持的标准
HTML 标记的控件,在你的web窗体中,凡是包含 runat='server'
属性声明的元素都叫做服务器控件(在VS.Net中的设计页面中,用一个小小的绿色箭头表示),你可以用原有的HTML元素并加上runat=”server”属性使其变为一个服务器控件,这叫做HtmlControls,它可以直接映射到标准HTML标记;也可以使用.Net提供的全新的WebControls,它比前者更抽象,功能也更加强大。不管采用哪一类控件,runat=”se
使用关系代数合并数据
1 关系代数
合并数据集合的理论基础是关系代数,它是由E.F.Codd于1970年提出的。
在关系代数的形式化语言中:
用表、或者数据集合表示关系或者实体。
用行表示元组。
用列表示属性。
关系代数包含以下8个关系运算符
选取――返回满足指定条件的行。
投影――从数据集合中返回指定的列。
笛卡尔积――是关系的乘法,它将分别来自两个数据集合中的行以所有可能的方式进行组合。
并――关系的加法和减法,它可以在行的方向上合并两个表中的数据,就像把一个表垒在另一个表之上一样。
交――返回两个数据集合所共有的行。
差――返回只属于一个数据集合的行。
连接――在水平方向上合并两个表,其方法是:将两个表中在共同数据项上相互匹配的那些行合并起来。
除――返回两个数据集之间的精确匹配。
此外,作为一种实现现代关系代数运算的方法,SQL
动态交叉表总结(2006-12-02 11:28)
动态交叉表总结
declare @sql varchar(8000)
看论坛里讨论动态交叉表这么多贴,小结了一下.
其实创建动态交叉表里是应用了递归的select变量这种概念,递归的select变量可以使用select语句和子查询将一个变量与其自身拼接起来。
一个标准的创建动态交叉表的code我归纳如下:
Declare @sql varchar(8000)
set @sql = 'select columnA,'
select @sql = @sql + 'sum(case columnB when '''+columnB+ ''' then
columnC else 0 end) as '''+columnB+ ''','
from (select distinct columnB from Table) as A
select @sql = left(@sql,len(@sql)-1) + ' from Table group by
columnA'
exec(@sql)
go
相信这个可以实现绝大部分动态交叉表
Example:
Declare @S Nvarchar(4000)
Set @S=''
Select @S=@S+N',SUM(Case 所属糖厂 When N'''+所属糖厂+N''' Then 实际重量 Else 0
End) As '+所属糖厂
From V_PonderationInfo_Gather Group By 所属糖厂 Order By 所属糖厂