存储过程实现:更新、汇总、复制功能

在项目中,要对相片档案资料进行归档(案卷号、件号、题名、归档人、归档日期,归档标示),在归档过程中要用到全文检索(用一个字段保存全文实现),把该数据从部门表复制到总表中,即要实现更新、汇总、复制功能于一体的存储过程:

ALTER PROC [dbo].[guidang]
@tablename varchar(30),
@id int ,
@tm varchar(500),
@jh int,
@t DATETIME ,
@ajh INT,
@gdr VARCHAR(10)
AS
DECLARE @sql VARCHAR(2000) SET @sql='update <a href="mailto:%27+@tablename+%27" target="_blank">'
+@tablename+'</a> set flag='''+CAST(3 AS  VARCHAR(1))+''',gdr='''+@gdr+''',
gdsj='''+CAST(@t AS VARCHAR(25))+''',jh='+CAST(@jh AS varchar(10))+',
ajh='+CAST(@ajh AS  VARCHAR(10))+',tm='''+@tm+''',textall=tm+'+
'''|'''+'+isnull(gjz,'''')+'+'''|'''+'+isnull(gjz,'''')+'+'''|'''
+'+isnull(fsdd,'''')+'+'''|'''+
'+isnull(zyrw,'''')+'+'''|'''+'+isnull(psz,'''')+'+'''|'''
+'+isnull(tgz,'''')+'
+'''|'''+'+isnull(zrz,'''')+'+'''|'''+'+isnull(srz,'''')+'
+'''|'''+'+isnull(bz,'''')+'+'''|'''+'+isnull(scr,'''')+'+'''|'''+
'+isnull(shr,'''')+'+'''|'''+'
+isnull(gdr,'''')where id='+CAST(@id AS VARCHAR(10))+';insert into S_bm_all
select *  from <a href="mailto:%27+@tablename+%27" target="_blank">'
+@tablename+'</a> where id='+CAST(@id AS VARCHAR(10))
EXEC(@sql)

在这个编写过程中,如果汇总项中,有一项为null,就会得到textall为null,这个困惑了我很久,最后发现了问题在这,用isnull函数解决问题,还有一个细节问题,“”有表示转义的意思

动态复制一个表中一条数据到另一个表中(列不完全相同)(存储过程实现)

因为要用到回收站功能,删除一条记录,要先放到一个delete表中,以便以后恢复
要求:
1、delete表要比被删除表中多三项(用于表明删除用户,删除的是哪种用户表,删除该条数据在该用户表中的id)
2、用户表有多张(一个部门一张,但是一个部门又有多个用户,所有设计数据库时,回收站表只设置了一张,因为如果每一部门设置一张delete表,那么有很多跨部门操作,数据库最后终于一个用户的回收站里面记录整理起来很麻烦)
3、表中的记录项很多,有40多个属性,所有如果有程序来实现,数据量太大,会出现不可预期的错误,不得不用存储过程
因为自己对存储过程也不熟悉,一边写,一边学习,用了将近一天的时间,终于搞定了,其中主要难题:
1、数据存放到临时变量中,
2、对其中一个变量——表的调用
现在把存储过程放起来,也是对我自己一天工作的肯定,高手不要见笑

ALTER PROCEDURE [dbo].[copy_data]
@tablename varchar(30),
@t_id int ,
@u_id int
as
set nocount on
declare @tm varchar(500)
declare @jh int
declare @ajh int
declare @gjz varchar(100)
declare @sjms varchar(5000)
declare @fsdd varchar(100)
declare @fsrq nchar(10)
declare @zyrw varchar(1000)
declare @psz varchar(20)
declare @psrq nchar(10)
declare @tgz varchar(50)
declare @zrz varchar(50)
declare @sc nchar(4)
declare @ly varchar(8)
declare @cjh varchar(20)
declare @srz nchar(10)
declare @flh int
declare @dph nchar(10)
declare @bz varchar(500)
declare @xpdx bigint
declare @xpgs nchar(10)
declare @xpxs nchar(11)
declare @scrid int
declare @scr nchar(10)
declare @scsj datetime
declare @scbm int
declare @shr nchar(10)
declare @shsj datetime
declare @ecbz varchar(500)
declare @gdr nchar(10)
declare @gdsj datetime
declare @xgsj datetime
declare @flag nchar(1)
declare @ysurl varchar(100)
declare @ysfile varchar(250)
declare @xgurl varchar(100)
declare @xgfile varchar(250)
declare @xwurl varchar(500)
declare @xwnr varchar(4000)
declare @textall varchar(4000)
declare @fei nvarchar(4000)
set @fei=N'select @tm=[tm]
,@jh=[jh]
,@ajh=[ajh]
,@gjz=[gjz]
,@sjms=[sjms]
,@fsdd=[fsdd]
,@fsrq=[fsrq]
,@zyrw=[zyrw]
,@psz=[psz]
,@psrq=[psrq]
,@tgz=[tgz]
,@zrz=[zrz]
,@sc=[sc]
,@ly=[ly]
,@cjh=[cjh]
,@srz=[srz]
,@flh=[flh]
,@dph=[dph]
,@bz=[bz]
,@xpdx=[xpdx]
,@xpgs=[xpgs]
,@xpxs=[xpxs]
,@scrid=[scrid]
,@scr=[scr]
,@scsj=[scsj]
,@scbm=[scbm]
,@shr=[shr]
,@shsj=[shsj]
,@ecbz=[ecbz]
,@gdr=[gdr]
,@gdsj=[gdsj]
,@xgsj=[xgsj]
,@flag=[flag]
,@ysurl=[ysurl]
,@ysfile=[ysfile]
,@xgurl=[xgurl]
,@xgfile=[xgfile]
,@xwurl=[xwurl]
,@xwnr=[xwnr]
,@textall=[textall]
from ['+@tablename+N'] where id='+CAST(@t_id AS varchar(10))
exec sp_executesql @fei,
<a href="mailto:N%27@tm" target="_blank">N'@tm</a> varchar(500) OUT,
@jh int OUT,
@ajh int OUT,
@gjz varchar(100) OUT,
@sjms varchar(5000) OUT,
@fsdd varchar(100) OUT,
@fsrq nchar(10) OUT,
@zyrw varchar(1000) OUT,
@psz varchar(20) OUT,
@psrq nchar(10) OUT,
@tgz varchar(50) OUT,
@zrz varchar(50) OUT,
@sc nchar(4) OUT,
@ly varchar(8) OUT,
@cjh varchar(20) OUT,
@srz nchar(10) OUT,
@flh int OUT,
@dph nchar(10) OUT,
@bz varchar(500) OUT,
@xpdx bigint OUT,
@xpgs nchar(10) OUT,
@xpxs nchar(11) OUT,
@scrid int OUT,
@scr nchar(10) OUT,
@scsj datetime OUT,
@scbm int OUT,
@shr nchar(10) OUT,
@shsj datetime OUT,
@ecbz varchar(500) OUT,
@gdr nchar(10) OUT,
@gdsj datetime OUT,
@xgsj datetime OUT,
@flag nchar(1) OUT,
@ysurl varchar(100) OUT,
@ysfile varchar(250) OUT,
@xgurl varchar(100) OUT,
@xgfile varchar(250) OUT,
@xwurl varchar(500) OUT,
@xwnr varchar(5000) OUT,
@textall varchar(5000) OUT',
@tm  OUT,
@jh  OUT,
@ajh  OUT,
@gjz  OUT,
@sjms  OUT,
@fsdd  OUT,
@fsrq  OUT,
@zyrw  OUT,
@psz  OUT,
@psrq  OUT,
@tgz  OUT,
@zrz  OUT,
@sc  OUT,
@ly  OUT,
@cjh OUT,
@srz  OUT,
@flh  OUT,
@dph OUT,
@bz  OUT,
@xpdx  OUT,
@xpgs  OUT,
@xpxs  OUT,
@scrid  OUT,
@scr  OUT,
@scsj  OUT,
@scbm  OUT,
@shr  OUT,
@shsj  OUT,
@ecbz  OUT,
@gdr  OUT,
@gdsj  OUT,
@xgsj  OUT,
@flag OUT,
@ysurl OUT,
@ysfile  OUT,
@xgurl  OUT,
@xgfile  OUT,
@xwurl  OUT,
@xwnr  OUT,
@textall  OUT;
INSERT INTO [yx].[dbo].[S_del]
([t_id]
,[u_id]
,[u_t]
,[tm]
,[jh]
,[ajh]
,[gjz]
,[sjms]
,[fsdd]
,[fsrq]
,[zyrw]
,[psz]
,[psrq]
,[tgz]
,[zrz]
,[sc]
,[ly]
,[cjh]
,[srz]
,[flh]
,[dph]
,[bz]
,[xpdx]
,[xpgs]
,[xpxs]
,[scrid]
,[scr]
,[scsj]
,[scbm]
,[shr]
,[shsj]
,[ecbz]
,[gdr]
,[gdsj]
,[xgsj]
,[flag]
,[ysurl]
,[ysfile]
,[xgurl]
,[xgfile]
,[xwurl]
,[xwnr]
,[textall])
VALUES
(
@t_id,
@u_id,
@tablename,
@tm  ,
@jh  ,
@ajh  ,
@gjz  ,
@sjms  ,
@fsdd  ,
@fsrq  ,
@zyrw  ,
@psz  ,
@psrq  ,
@tgz  ,
@zrz  ,
@sc  ,
@ly  ,
@cjh  ,
@srz  ,
@flh  ,
@dph  ,
@bz  ,
@xpdx  ,
@xpgs  ,
@xpxs  ,
@scrid  ,
@scr  ,
@scsj  ,
@scbm  ,
@shr  ,
@shsj  ,
@ecbz  ,
@gdr  ,
@gdsj  ,
@xgsj  ,
@flag  ,
@ysurl  ,
@ysfile  ,
@xgurl  ,
@xgfile  ,
@xwurl  ,
@xwnr  ,
@textall
)
set nocount off

从企业管理器中直接导出来的,现在看看也没有什么难的哦,只是因为自己不熟悉,而使得自己在项目时间本来就是很紧张的情况下还因为这个而浪费了不少的时间。

FreeTextbox使用

在系统发邮件,新闻内容发布上要用到freetextbox,用起来是很爽的,但是感觉freetextbox中的定义菜单感觉困难,今天在网上找到了一些资料,和大家分享下
toolbarlayout=”ParagraphMenu,FontFacesMenu,FontSizesMenu,
FontForeColorsMenu,FontForeColorPicker,FontBackColorsMenu,
FontBackColorPicker|Bold,Italic,Underline,Strikethrough,Superscript,
Subscript,RemoveFormat|JustifyLeft,JustifyRight,JustifyCenter,
JustifyFull;BulletedList,NumberedList,Indent,Outdent;CreateLink,
Unlink,InsertImage|Cut,Copy,Paste,Delete;Undo,Redo,Print,Save|
SymbolsMenu,StylesMenu,InsertHtmlMenu|InsertRule,InsertDate,
InsertTime|InsertTable,EditTable;InsertTableRowAfter,
InsertTableRowBefore,DeleteTableRow;InsertTableColumnAfter,
InsertTableColumnBefore,DeleteTableColumn|InsertForm,InsertTextBox,
InsertTextArea,InsertRadioButton,InsertCheckBox,InsertDropDownList,
InsertButton|InsertDiv,EditStyle,InsertImageFromGallery,
Preview,SelectAll,WordClean,NetSpell”
Bold  加粗
BulletedList 项目符号
Copy  复制
CreateLink  插入链接
Cut   剪切
Delete  删除
DeleteTableColumn 删除一列(En)
DeleteTableRow  删除一行(En)
IeSpellCheck IE拼写检查(En 需要安装拼写检查软件)
Indent  增加缩进
InsertDate 插入日期
InsertImage 插入图片
InsertRule 插入水平线(En)
InsertTable 插入表格(En)
InsertTableColumnAfter 插入表格列在后面(En)
InsertTableColumnBefore 插入表格列在前面(En)
InsertTableRowAfter 插入表格行在后面(En)
InsertTableRowBefore 插入表格行在前面(En)
InsertTime 插入时间
Italic 斜体
JustifyCenter 居中
JustifyFull 两端对齐
JustifyLeft 左对齐
JustifyRight 右对齐
NetSpell 网络拼写检查(En)
NumberedList 编号
Outdent 减少缩进
Paste 粘贴
Print 打印
Redo  重复
RemoveFormat 删除所有格式
Save  保存(En)
StrikeThrough  删除线
SubScript 下标
SuperScript 上标
Underline 下划线
Undo  撤消
Unlink  删除链接
希望对大家有帮助

js全选和读出对应id和对应值

奉师命实习留校做开发,需要做一个科研项目——影像系统。授命之后开始做需求,经过近十天的努力,大概的需求浮出水面,在以后的日子里面,我会把开 发过程中的一些技术功能模块,我认为有价值贡献出来分享的,虽然很多可能是网上的功能修改而成,但是可以保证都是经过我测试,并且已经消化的知识,如果无 意中侵犯了相关原创作者版权,请与我联系(邮箱:8chf@163.com),我将及时从日志上删除,并从系统功能中除掉。
因为是今天才决定写的,所有前期的有些需求的设计和功能模块就暂时不写出来了,如果后期时间有多余,我将会渐渐的补全。
今天试验课回到宿舍后,考虑到系统在很多地方要实现gridv+checkbox选择(有些要全选)功能,就写了一个,代码如下:
aspx代码:
<asp:GridView ID=”GridView1″ runat=”server” AutoGenerateColumns=”False”
BorderWidth=”0px” DataKeyNames=”id”>
<Columns>
<asp:TemplateField>
<HeaderTemplate>
<input id=”Checkbox2″ runat=”server” type=”checkbox” onclick=”CheckAllC(this)”/>
</HeaderTemplate>
<ItemTemplate>
<asp:CheckBox ID=”ItemCheckBoxC” runat=”server” />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText=”全选”>
<ItemTemplate>
<asp:Label ID=”Label1″ runat=”server” Text='<%# Bind(“id”) %>’ Visible=”false”></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText=”名称”>
<ItemTemplate>
<asp:Label ID=”Label2″ runat=”server” Text='<%# Bind(“username”) %>’></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:Button ID=”Button1″ runat=”server” onclick=”Button1_Click”
Text=”显示选择列id_name” />
cs代码:

</pre>
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
bind();
}
}
private void bind()
{
DataTable dt =  xifenfei.mssql.SqlHelper.ExecuteDataset(xifenfei.mssql.SqlHelper.Connection_test,  CommandType.Text, "select id,username from login").Tables[0];
GridView1.DataSource = dt;
GridView1.DataBind();
}
protected void Button1_Click(object sender, EventArgs e)
{
string selectid = ""; string selectname = "";
for (int i = 0; i < GridView1.Rows.Count; i++)
{
CheckBox ch = (CheckBox)GridView1.Rows[i].Cells[0].FindControl("ItemCheckBoxC");
if (ch.Checked)
{
selectid += GridView1.DataKeys[i].Value.ToString()+";";
Label lbl = (Label)GridView1.Rows[i].FindControl("Label2");
selectname += lbl.Text+";";
}
}
Response.Write(selectid+"<br />"+selectname);
}

js代码

<script type="text/javascript">
function CheckAllC(oCheckbox)
{
var GridView1 = document.getElementById("<%=GridView1.ClientID %>");
for(i = 1;i < GridView1.rows.length; i++)
{
GridView1.rows<em>.cells[0].getElementsByTagName("INPUT")[0].checked = oCheckbox.checked;
}
}
</script> </em>

如果有分页的话,要在 GridView1.rows.length的数值上减一

弹出div,锁定界面

如题:本来是可以用ajaxtools控件来实现,但是感觉效果不是很好,而且效率太低,所以就写了一个代码如下
js代码:

function showname()//弹出所需模块
{
var show=document.getElementById("shown");
show.style.display="";
document.getElementById("shown").style.top="20px";
document.getElementById("shown").style.left="20px";
suoding();
}
function suoding()//锁定界面
{
var sWidth,sHeight;
sWidth=document.documentElement.clientWidth //当前浏览器内部宽度
sHeight=document.documentElement.clientHeight
var Sys = {};
var ua = navigator.userAgent.toLowerCase();
if (window.ActiveXObject)//判断ie,如果是7以下版本,采用屏幕的宽度和高度,会导致显示结果有一点滚动条
{
Sys.ie = ua.match(/msie ([\d.]+)/)[1]
if(Sys.ie<7)
{
sWidth=screen.width;//显示器宽度,和上面的宽度有一定的出入
sHeight=screen.height;
}
}
var bgObj=document.createElement("div");
bgObj.setAttribute('id','bgDiv');
bgObj.style.position="absolute";
bgObj.style.top="0";
bgObj.style.background="#cccccc";
bgObj.style.filter="progid:DXImageTransform.Microsoft.Alpha(style=3,
opacity=25,finishOpacity=75";
bgObj.style.opacity="0.6";
bgObj.style.left="0";
bgObj.style.width=sWidth + "px";
bgObj.style.height=sHeight + "px";
bgObj.style.zIndex = "50";
document.body.appendChild(bgObj);
}
function closename()//关闭
{
document.getElementById("shown").style.display="none";
var bg=document.getElementById("bgDiv");
if (bg!=null) {//排除有些浏览器不能取到动态div的情况
document.body.removeChild(bg);
}
}

html代码:
<div style=”width:1000px;height:300px;background-color:blue”> <input type=”button” value=”点击” onclick=”alert(‘adfadsfd’)”></input></div>
<div style=”position:absolute”>
<a href=”#” onclick=”showname()”  >显示姓名</a>
<div id=”shown” style=”width:300px;height:200px;background-color:gray; z-index:100; position:absolute;display:none;”><a href=”#” onclick=”closename()”  >关闭</a>
</div>
<div style=”background-color:red;width:100px;height:100px;”></div>
</div>

后台管理框架

为了让项目给人的感觉稳重,美观,便于统一编程管理,准备采用框架来实现后台管理模块。
一直都没有重视ext,以为有jqurey就可以解决所有的js问题了,也许是可以解决,O(∩_∩)O哈哈~,我技术水平还不到哦,不能完全的灵活的使用jquery。
ext虽然比jQuery大多了,但是同样功能也强大多了,我也只是对着网上的手册,稍微的大概的写了一个框架,能够自适应高度,根据不同的用户权限,从xml中读取数据库,显示不同的树形菜单。
不过说到底就是几个iframe组成的,只是比起传统的iframe生硬的组合,而是动态生成的iframe,好看了点,自由点高了点,还考虑了一 些iframe注入的情况。因为代码太多了,我只是把自己写的比较多的一部分拿去来,和大家分享下

Ext.onReady(function() {
Ext.BLANK_IMAGE_URL = "ext/resources/images/default/s.gif";
var Tree = Ext.tree;
var tree = new Tree.TreePanel({
el: 'west_content',
useArrows: true,
autoHeight: true,
split: true,
lines: true,
autoScroll: true,
animate: true,
enableDD: true,
border: false,
containerScroll: true,
loader: new Tree.TreeLoader({
dataUrl: './ext/ext_tree_json.aspx'        })
});
// set the root node
var root = new Tree.AsyncTreeNode({
text: '影像系统管理员',
draggable: false,
id: '0'     });
tree.setRootNode(root);
// render the tree
tree.render();
root.expand();
var viewport = new Ext.Viewport({
layout: 'border',
items: [{
region: 'west',
id: 'west',
//el:'panelWest',
title: '系统菜单导航',
split: true,
width: 200,
minSize: 200,
maxSize: 400,
collapsible: true,
margins: '160 0 2 2',
cmargins: '160 5 2 2',
layout: 'fit',
layoutConfig: { activeontop: true },
defaults: { bodyStyle: 'margin:0;padding:0;' },
//iconCls:'nav',
items:
new Ext.TabPanel({
border: false,
activeTab: 0,
tabPosition: 'bottom',
items: [{
contentEl: 'west_content',
title: '影像系统后台管理',
autoScroll: true,
bodyStyle: 'padding:5px;'
}]
})
}, {
region: 'center',
el: 'center',
deferredRender: false,
margins: '160 0 2 0',
html: '<iframe id="center-iframe" width="100%" height=100%  name="main"  frameborder="0" scrolling="auto" style="border:0px none;  background-color:#ffffff; "   src="admin/articles.aspx"></iframe>',
autoScroll: true
},
{
region: 'south',
margins: '0 0 0 2',
border: false,
html: '<div>版权书写处</div>'
}
]
});
setTimeout(function() {
Ext.get('loading').remove();
Ext.get('loading-mask').fadeOut({ remove: true });
}, 250)
});

注:整个框架参考了火舞狂歌-后台管理框架,直接在vs中运行,有时候会出现ie无响应的情况,但是测试在iis和火狐中正常

url重定向

前两天一直忙着大学的最好的考试,现在好 了,学生时代基本上结束了,暂时可以一心的做开发,写写代码,在考试的这两天中,我只是看了下url重定向,并且稍微的写了点,基本上是可以满足项目 url rewrite的需求了,其实说真的,我在项目中想采用url rewrite,一是为了让url不显示显示很多的参数,给别人注入带来一定的方便;二是为了体验下这个技术,自己一直想写点这个的,因为暑假没有成功; 三是感觉上是静态网页,有成就感。现在稍微的介绍下结合网上的一般重归思路写出来的结果:
使用Intelligencia.UrlRewriter.dll来实现
在web.config中配置:
(1)在<configSections></configSections>节中加上<section name=”rewriter” requirePermission=”false” type=”Intelligencia.UrlRewriter.Configuration.RewriterConfigurationSectionHandler, Intelligencia.UrlRewriter” />;
(2)在<httpModules></httpModules>节中加上<add name=”UrlRewriter” type=”Intelligencia.UrlRewriter.RewriterHttpModule, Intelligencia.UrlRewriter”/>;
(3)在<configuration></configuration>节中添 加<rewriter>    <rewrite url=”~/(.+).html$” to=”~/ViewNews.aspx?ID=$1″ />  </rewriter>   <–重定性规则,按照自己的需求来写,这里对正则表达式基础有点要求–>
测试下,1232.html,是不是出现和id=1232一样的效果。
但是如果你点击该页面的服务器端事件是,url又会变成viewnews.aspx?id=`1232了,这个问题的解决方案网上有两种,一种是重 新form,另一种是重新page,我考虑到保持aspx页面的完整性,采用了重新page的方法来解决,就是一个类文件,在网上下载的叫做 URL.page的,有需要的朋友可以到网上去找下。

动态更好网站背景图片、背景颜色,js调色板

今天考虑到管理员通过后台调整网站网址背景图片和背景颜色的问题,小小的下了下该功能模块,并实现了。
我的思路:管理员可以通过后台添加网站背景图片或者颜色,然后读入数据库中,管理员然后可以从数据库中选择一套模式进行发布出来,显示在前台。把管 理员选择的一套模式相关读入application里面,然后相关页面直接可以通过application里面取得数据库,显示相关页面,从而避免重复读 取数据库,影像网站效率。这其中涉及到两条语句(核心功能实现,我查msdn找到):
body_a.Style.Add(HtmlTextWriterStyle.BackgroundColor, “#123456”);//添加或者改变背景色
body_a.Style.Add(HtmlTextWriterStyle.BackgroundImage, “./img/2.jpg”);//添加或者改变背景图片
我这里添加body的id为body_a,并runat=“server”,这里没用从application里面取数据,直接写入字符串。
调色板:主要是在网上找的,自己稍微加工了下,代码大概公布如下:
js代码:

var ColorHex = new Array('00', '33', '66', '99', 'CC', 'FF')
var SpColorHex = new Array('FF0000', '00FF00', '0000FF', 'FFFF00', '00FFFF', 'FF00FF')
var current = null
function getEvent() {
if (document.all) {
return window.event; //如果是ie
}
func = getEvent.caller;
while (func != null) {
var arg0 = func.arguments[0];
if (arg0) {
if ((arg0.constructor == Event || arg0.constructor == MouseEvent) ||  (typeof (arg0) == "object" && arg0.preventDefault &&  arg0.stopPropagation)) {
return arg0;
}
}
func = func.caller;
}
return null;
}
function intocolor() {
document.getElementById("colorpanel").style.display = "";//show 调色板
var colorTable = ''
for (i = 0; i < 2; i++) {
for (j = 0; j < 6; j++) {
colorTable = colorTable + '<tr height=12>'
colorTable = colorTable + '<td width=11 style="background-color:#000000">'
if (i == 0) {
colorTable = colorTable +  '<td width=11 style="background-color:#' + ColorHex[j] + ColorHex[j]  + ColorHex[j] + '">'
}
else {
colorTable = colorTable + '<td width=11 style="background-color:#' + SpColorHex[j] + '">'
}
colorTable = colorTable + '<td width=11 style="background-color:#000000">'
for (k = 0; k < 3; k++) {
for (l = 0; l < 6; l++) {
colorTable = colorTable + '<td width=11 style="background-color:#' +  ColorHex[k + i * 3] + ColorHex[l] + ColorHex[j] + '">'
}
}
}
}
colorTable = '<table width=253 border="0" cellspacing="0"  cellpadding="0" style="border:1px #000000  solid;border-bottom:none;border-collapse: collapse"  bordercolor="000000">'
+ '<tr height=30><td colspan=21 bgcolor=#cccccc>'
+ '<table cellpadding="0" cellspacing="1" border="0" style="border-collapse: collapse">'
+ '<tr><td width="3"><td><input type="text"  name="DisColor" id="DisColor" size="6" disabled style="border:solid 1px  #000000;background-color:#ffff00"></td>'
+  '<td width="3"><td><input type="text" name="HexColor"  id="HexColor" size="7" style="border:inset 1px;font-family:Arial;"  value="#000000"></td></tr></table></td></table>'
+ '<table border="1" cellspacing="0" cellpadding="0"  style="border-collapse: collapse" bordercolor="000000"  onmouseover="doOver()" onmouseout="doOut()" onclick="doclick()"  style="cursor:hand;">'
+ colorTable + '</table>';
colorpanel.innerHTML = colorTable
}
function doOver() {
var evt = getEvent();
var element = evt.srcElement || evt.target;
var DisColor = document.getElementById("DisColor");
var HexColor = document.getElementById("HexColor");
if ((element.tagName == "TD") && (current != element)) {
if (current != null) { current.style.backgroundColor = current._background }
element._background = element.style.backgroundColor
DisColor.style.backgroundColor = rgbToHex(element.style.backgroundColor)
HexColor.value = rgbToHex(element.style.backgroundColor)
element.style.backgroundColor = "white"
current = element
}
}
/**
* firefox 的颜色是以(RGB())出现,进行转换
*/
function rgbToHex(aa) {
if (aa.indexOf("rgb") != -1) {
aa = aa.replace("rgb(", "")
aa = aa.replace(")", "")
aa = aa.split(",")
r = parseInt(aa[0]);
g = parseInt(aa[1]);
b = parseInt(aa[2]);
r = r.toString(16);
if (r.length == 1) { r = '0' + r; }
g = g.toString(16);
if (g.length == 1) { g = '0' + g; }
b = b.toString(16);
if (b.length == 1) { b = '0' + b; }
return ("#" + r + g + b).toUpperCase();
}
else {
return aa;
}
}
function doOut() {
if (current != null) current.style.backgroundColor = current._background;
}
function doclick() {
var evt = getEvent();
var element = evt.srcElement || evt.target;
if (element.tagName == "TD") {
bg = rgbToHex(element._background);
// alert("选取颜色: " + bg);
// return bg;
document.getElementById("TextBox1").value = bg;
document.getElementById("colorpanel").style.display = "none"; //选好颜色后,关闭colorpanel
}
}

aspx代码:
<table >
<tr>
<td><asp:TextBox ID=”TextBox1″ runat=”server”></asp:TextBox></td>
<td><input id=”Button1″ type=”button” value=”选取颜色” onclick=”intocolor();” /></td>
</tr>
<tr>
<td><div id=”colorpanel” style=”position: absolute;”></div></td>
<td>&nbsp;</td>
</tr>
</table>
注:外套table是为了,显示的时候稍微美观点
声明:现在公布的代码都是本地测试代码,因为项目还没有正式开始写,外观和功能尚可能还有些bug,这些等待到正式项目中调试;大家如果使用这些代码出现问题,请耐心调试,我保证我都是调试正常并且基本上达到我的需求的代码才会放在日志上的。