网络编程
位置:首页>> 网络编程>> Asp编程>> 用ASP创建多栏选项列表SELECT(3)

用ASP创建多栏选项列表SELECT(3)

  发布时间:2007-10-08 13:18:00 

标签:SELECT,列表,asp

   
     代码的下一个重要部分是浏览器类型的简单测试。当我们最后建立选项列表时,我们需要区分开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,如果不将它们进行重塑的话,简单的比较过程也会变得难以预料。有时候重塑是多余的(甚至不必要)--但是,我的观点是只要有疑问,就进行重塑。

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com