如何实现可以带详细表格的DropDownList

本文详细介绍了如何实现在点击DropDownList的时候弹出DataGrid,然后从DataGrid里面选择相应的项。
很早就发现在网上有很酷的下拉选择框,今天我在这里也写一个,该方法旨在说明问题的一个解决方法,该方法可以扩展为自定义控件,由于时间有限所以在这里我只提供一个该方法的页面实现。当然你可以发挥你的才能作出更漂亮的。
问题描述:我们在使用DropDownList的时候经常会碰到这样的问题(至少我碰到了),在一个很小的区域显示一个比较复杂的内容,希望让选择的人对要选择的东西有比较清晰的认识,我们需要在点击下拉框的时候可以显示给用户非常详细的信息,可是由于布局的限制或者由于下拉框本身的限制,我们很难做到。
解决方案:我们希望有一个层来显示一个丰富的内容,既然是丰富的内容,我们首先想到的应该是DataGrid控件,那么好,我们就用DataGrid和TextBox以及Button来实现该功能。
需要了解的知识:一点点js的东西,一点点ASP.NET的东西,还有一点点耐心
下面是代码:
我们需要一个层用来放我们的DataGrid,我们叫他divParent。代码如下:
<div id="divParent" style="OVERFLOW:auto;POSITION:absolute;HEIGHT:300px;"></div>
接着我们需要一个TextBox和一个Button,TextBox是服务器控件,Button是一个客户端控件代码如下:
<asp:TextBox id="TextBox1" runat="server"></asp:TextBox>
<INPUT type="button" value="6" style="FONT-FAMILY: marlett" onclick="ShowDetail('TextBox1','grdContent')">
我们将Button的字体设置成marlett这样可以使用“6”来显示一个下拉箭头当然你也可以使用一个图片。
接着就是DataGrid了,DataGrid的代码如下:
<div style='DISPLAY:none'>
<asp:DataGrid id="grdContent" runat="server" ShowHeader="False" BackColor="#FFFFFF"></asp:DataGrid>
</div>
我们使用了一个层来隐藏该DataGrid,这样用户就看不到这个DataGrid了,只有在选择的时候才显示该DataGrid。
此处还可以使用PowerDataGrid来显示一个漂亮的DataGrid对象,同时可以固定表头。(有关PowerDataGrid请到www.foxhis.com/powermjtest/处下载)
固定表头的DataGrid的实现可以参考我的另一篇文章(http://www.csdn.net/Develop/read_article.asp?id=25538)

上面是客户端的表示,下面就是为了实现该效果而做的客户端逻辑,该逻辑由3个js函数实现。代码如下:
<SCRIPT LANGUAGE="JavaScript">
// 显示datagrid提供详细内容
function ShowDetail(txt,grd){
var datagridParent = document.getElementById('divParent');//首先找到datagrid的容器
var txtobj = document.getElementById(txt);//找到需要需要显示选择内容的TextBox
var datagrid = document.getElementById(grd);//找到DataGrid呈现的客户端表格
// 下面就是显示datagrid和隐藏datagrid时候做的显示开关
if(datagridParent.innerHTML == ''){
document.getElementById('divParent').innerHTML = datagrid.outerHTML;
}
else{
HideLayer();
}
// 定位要显示的层的位置
document.getElementById('divParent').style.pixelLeft=txtobj.offsetLeft;
document.getElementById('divParent').style.pixelTop=txtobj.offsetTop+txtobj.offsetHeight;
}
// 当选择表格中的行的时候将感兴趣的内容显示到文本框中
// txt显示内容的目标控件,row用户点击的行对象,colID用户要显示的列的内容
// 使用row和ColID可以定位一个单元格
function GetRowData(txt,row,colID){
var txtobj = document.getElementById(txt);
txtobj.value = row.cells[colID].innerText;
HideLayer();//选择完以后隐藏层
}
// 隐藏层
function HideLayer(){
document.getElementById('divParent').innerHTML = '';
}
</SCRIPT>
代码的详细解释请看代码注释。
下面是CS部分的代码,首先我们需要给DataGrid绑定数据代码,我们在Page_Load里面写如下代码:
if(!this.IsPostBack){
SqlConnection con = new SqlConnection("server=localhost;database=pubs;uid=sa;pwd=sa;");
SqlDataAdapter da = new SqlDataAdapter("select au_lname+' '+au_fname,city from authors",con);
DataSet ds = new DataSet();
da.Fill(ds);
this.grdContent.DataSource = ds.Tables[0];
this.grdContent.DataBind();
}
最后我们需要在该DataGrid绑定数据的时候做点什么,下面是我们做的事情,代码如下:
private void grdContent_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e) {
e.Item.Attributes.Add("onmouseover", "this.bgColor='#f1f1f1'");
e.Item.Attributes.Add("onmouseout", "this.bgColor='#ffffff'");
e.Item.Attributes.Add("onclick", "GetRowData('"+this.TextBox1.ClientID+"',this,1)");
}
我们首先需要给用户一个醒目的鼠标移动的效果所以我们使用将onmouseover和onmouseout指定到tr对象上,之后我们将给tr编写onclick
事件相应所要激发的函数。(tr是DataGrid呈现在客户端以后的行对象)
好了,到此我们的程序就写完了。
对该工程有任何问题请发送邮件到wu_jian830@hotmail.com。如果您需要源代码,您也可以发送邮件。

时间: 2024-08-31 05:14:35

如何实现可以带详细表格的DropDownList的相关文章

【iOS开发】30多个iOS常用动画,带详细注释

30多个iOS常用动画,带详细注释 // // CoreAnimationEffect.h // CoreAnimationEffect // // Created by VincentXue on 13-1-19. // Copyright (c) 2013年 VincentXue. All rights reserved. // import   @interface CoreAnimationEffect : NSObject pragma mark - Custom Animation

怎么用ARCGIS画一张校园地图~~求高手指点~~最好带详细步骤~

问题描述 怎么用ARCGIS画一张校园地图~~求高手指点~~最好带详细步骤~ 解决方案 解决方案二:没有原始数据,谁能画出来,真心牛逼,要是只有ArcGIS就能画出来某个地方的地图,那搞测绘的不早失业啦.解决方案三:建议使用Mapinfo来做,从百度地图或谷歌地图的卫星图上下个卫星图,然后用mapinfo配准后,自己画吧,电子地图也就是这样做出来的解决方案四:过来参观学习,是这样做出来的解决方案五:你可以在百度或者高德地图上截取一张你学校的地图,然后再在arcmap里进行矢量化,前提是你只需要你

如何在选中前一个Dropdownlist框体的一个内容时,自动带出下一个Dropdownlist框体中与之对应的内容

问题描述 代码顾客联系人联系电话20080121杨过欧阳锋1502121321220080124黄药师洪七公1373183517320080127赵敏小龙女13901203131....我的意思是:前一个Dropdownlist中是一系列代码供选择,比如我选中其中一个代码"20080121"后,就自动可以带出下一个Dropdownlist中的与之对应的顾客姓名"杨过"和再下面的一个Dropdownlist中的联系人"欧阳锋"以及下面的联系电话Dr

IOS 30多个iOS常用动画,带详细注释

[cpp] view plaincopy //   //  CoreAnimationEffect.h   //  CoreAnimationEffect   //   //  Created by VincentXue on 13-1-19.   //  Copyright (c) 2013年 VincentXue. All rights reserved.   //       #import <Foundation/Foundation.h>       /**   !  导入Quart

php 无限级分类学习参考之对ecshop无限级分类的解析 带详细注释_php技巧

复制代码 代码如下: function cat_options($spec_cat_id, $arr) { static $cat_options = array(); if (isset($cat_options[$spec_cat_id])) { return $cat_options[$spec_cat_id]; } /* 初始化关键参数: $level:当前子节点深度 $last_cat_id:当前父节点ID $options:带有缩进级别的数组 $cat_id_array:沿同一路径的

PHP 图片上传实现代码 带详细注释_php实例

复制代码 代码如下: <?php //用户上传图片处理文件 if ((($_FILES["file"]["type"] == "image/gif")|| ($_FILES["file"]["type"] == "image/jpeg")|| ($_FILES["file"]["type"] == "image/pjpeg"

PHP下载远程文件类源码,带详细注释,还支持断点续传

程序主要是使用 HTTP 协议下载文件,HTTP1.1协议必须指定文档结束后关闭链接,否则读取文档时无法使用feof判断结束,可以有两种使用方法,具体请下载查看源码.  代码如下 复制代码 <?php /**  * 下载远程文件类支持断点续传  */ class HttpDownload {     private $m_url = "";      private $m_urlpath = "";      private $m_scheme = "

ssh框架中spring整合hibernate的配置文件模板(带详细注释)

applicationContext.xml的配置文件模板 1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans 3 xmlns="http://www.springframework.org/schema/beans" 4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 5 xmlns:aop=&quo

PPT2016表格如何美化

  PowerPoint 2016表格天生丽质 PowerPoint 2016自带的表格模板已经非常漂亮并且非常丰富了,在"插入"选项卡里点击"表格",再在示意框里移动光标,就可以随意定制几行几列的表格,并且已经有很漂亮的颜色设置.要是不满意,选中生成的表格后,再切换到"表格工具-设计"选项卡里,从表格样式的近百种模板中任意替换样式. 图1 默认已是很漂亮的表格样式 图2 近百种表格样式可任选 华丽丽的透明表格图 就跟人类差不多,底子好了,随便化