用ASP创建多栏选项列表SELECT(3)
发布时间:2007-10-08 13:18:00
代码的下一个重要部分是浏览器类型的简单测试。当我们最后建立选项列表时,我们需要区分开IE 和 Netscape ,因为两者在指定字体和型号时对选项列表的处理是不同的。为了简单起见,我将不深入到有关浏览器兼容性的代码,因为我还想集中在代码的关键概念上。如果你想知道更多有关兼容性的 问题,你可以参考本文结尾处提供的代码。
strUA = Request.ServerVariables("HTTP_USER_AGENT")
If Instr(strUA, "MSIE") Then
browserType = "IE"
End If
接下来是对数据库进行调用,以恢复我们创建多栏列表时所想要使用的记录集。变量rsSelect 包含返回的设定结果。我是通过一个DCOM 对象spServerObj来实现对数据库的调用的,在数组中传递 参数及其值。但是通过ASP用ADO进行调用也同样简单,在这个例子中用一个简单的选择语句来恢复记录集。
Set rsSelect = spServerObj.callAnyProc(proc, parmname, parmval)
或者象在例子中那样:
Set rsSelect = MyConn.Execute(SQL_query)
然后,我们调整用来容纳多选项列表的栏名的值的数组的维数。你可以在开始时就定义好它的维数,但是我们按照讨论的流程,在这里设定数组的维数。所以,在column参数中传递的元素数就是在 多栏选项列表中的栏数。
Redim finalMaxLenArray(UBound(column))
第一个主要代码区是收集格式信息以正确地创建选项列表。代码区实质上做两件事。首先,它确定我们的最大栏宽。第二,代码要将找到的最大栏宽与maxcollen 参数中传递的任意值进行协调。
与我的例子正相反,你可能希望明确地设置栏宽,而不是在运行的过程中确定最大宽度。代码区的第一半在记录集中循环,找到最大值长度,并将它存储在相应的finalMaxLenArray 索引中。
有一件事需要指出的是你可以将Do?/CODE > 循环安排在外面,For Next循环在里面。这样的方法也许更有效,但是我觉得这样不符合直觉,所以我就没有改动代码。
’’Loop for formatting the select list values
For i = 0 to UBound(column)
maxStrLenTemp = 0
finalMaxLenArray(i) = 0
’’ Loop through recordset to determine the maximum length string
’’ in given column
If Not rsSelect.BOF Then rsSelect.MoveFirst
Do While Not rsSelect.EOF
maxStrLenTemp = Len(Trim(rsSelect(CStr(Trim(column(i))))))
If Not IsNull(maxStrLenTemp) Then
If CInt(maxStrLenTemp) > CInt(finalMaxLenArray(i)) Then
finalMaxLenArray(i) = maxStrLenTemp
End If
rsSelect.MoveNext
Loop
’’ If the derived col length is greater than the maxcollen parameter
’’ then reset col length.
If IsArray(maxcollen) = True Then
If CInt(maxcollen(i)) < > -1 Then
If finalMaxLenArray(i) > CInt(maxcollen(i)) Then
finalMaxLenArray(i) = CInt(maxcollen(i))
End If
Else
If CInt(maxcollen) < > -1 Then
If finalMaxLenArray(i) > CInt(maxcollen) Then
finalMaxLenArray(i) = CInt(maxcollen)
End If
End If
Next
也许你能注意到,在以上代码中进行了许多整理Trim(exampleVar) 和重塑CInt(examplevar)工作。当你 处理返回的记录集值时,应该将结果进行一下整理,去掉一些额外的空白。养成整理返回值的习惯能 节约许多调试的时间,是个很好的编码习惯。当对两个值进行比较时,将值重塑成所希望的数据类型 也是很好的。因为ASP只有一种数据类型variant,如果不将它们进行重塑的话,简单的比较过程也会变得难以预料。有时候重塑是多余的(甚至不必要)--但是,我的观点是只要有疑问,就进行重塑。


猜你喜欢
- 在使用reflect包获取函数,并调用时,总出现这个报错:panic: reflect: call of reflect.Value.Cal
- 将 PDF 转换为 CSV在机器学习中,我们应该少一些“数据清理”,多一些“数据
- 1.场景描述我们公司是做电商的,运营的工作指标都是按周来定的,所以他们对周特别敏感,希望我们能在日期选择器上显示周数。刚接到这个需求时,心中
- pyfinance简介在查找如何使用Python实现滚动回归时,发现一个很有用的量化金融包——pyfinance。顾名思义,pyfinanc
- 基本介绍约束用于确保数据库的数据满足特定的商业规则在mysql中,约束包括:not null,unique,primary key,fore
- Python 非常易学,强大的编程语言。Python 包括高效高级的数据结构,提供简单且高效的面向对象编程。Python 的学习过程少不了
- 1. 前言所谓的逃逸分析(Escape analysis)是指由编译器决定内存分配的位置吗不需要程序员指定。函数中申请一个新的对象如果分配在
- 介绍我们可以通过for循环来迭代list、tuple、dict、set、字符串,dict比较特殊dict的存储不是连续的,所以迭代(遍历)出
- PyQt5动态(可拖动控件大小)布局控件QSplitter简介PyQt还提供了特殊的布局管理器QSplitter。它可以动态地拖动子控件之间
- 前言微信小程序自带的消息提示框有字数限制,而且图标仅仅只有"success","loading",&
- 在日常的工作中,我们通常会有去探测目标主机是否存活的应用场景,单个的服务器主机可以通过计算机自带的DOS命令来执行,但是业务的存在往往不是单
- 我们今天主要描述的是php和MySQL转义字符,我们大家都知道php和MySQL转义字符的实际应用比例还是占为多数的,如果你对这一技术,心存
- 本文实例讲述了Python实现Sqlite将字段当做索引进行查询的方法。分享给大家供大家参考,具体如下:默认从sqlite中获取到的数据是数
- 有个朋友要求帮忙绘制堆叠柱状图,查阅了一些文档之后也算是完成了,只是一个小demo,下面我就记录一下。1.什么是堆叠柱状图与并排显示分类的分
- 下拉框连动JavaScript代码,市区二级联动多级联动下拉选择框,动态获取下一级琥珀无限级联动菜单-JavaScript版 <htm
- 训练深层神经网络是十分困难的,特别是在较短的实践内使他们收敛更加棘手。在本节中,我们将介绍批量归一化(batch normalization
- 首先我们应当了解什么是math库:math库是python提供的内置数学类函数库,math库不支持复数类型,仅支持整数和浮点数运算。math
- queue和pipe的区别: pipe用来在两个进程间通信。queue用来在多个进程间实现通信。 此两种方法为所有系统多进程通信的基本方法,
- 1 简介二进制日志,记录对数据发生或潜在发生更改的SQL语句,并以二进制形式保存在磁盘。2 Binlog 的作用主要作用:复制、恢复和审计。
- 一 Insert 语句1.在数据中只插入默认值:insert into [DBTrain].[dbo].[log_info]default