cuike519的blog

工作、学习、娱乐

用户操作
[即时聊天] [发私信] [加为好友]
wujianID:cuike519
86770次访问,排名1171(1),好友2人,关注者13人。
cuike519的文章
原创 44 篇
翻译 0 篇
转载 0 篇
评论 133 篇
cuike519的公告
很久没有写blog了,总觉得生活少点什么。我的新邮件Mathew.mike@hotmail.com My MSNspase is http://gunsbypower.spaces.msn.com/
最近评论
nychanglingfeng:真是挺牛的
nychanglingfeng:真是挺牛的
fmmmeck:今天我也遇到这个问题了,多亏了这篇文章和 lf_shao 的修正 !
fmmmeck:今天我也遇到这个问题了,多亏了这篇文章和 lf_shao 的修正 !
fmmmeck:今天我也遇到这个问题了,多亏了这篇文章和 lf_shao 的修正 !
文章分类
收藏
    相册
    程序代码
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 如何实现可以带详细表格的DropDownList收藏

    新一篇: 如何使用.NET生成C#源代码 | 旧一篇: 如何在C#里面象js一样可以直接计算字符串的值

           本文详细介绍了如何实现在点击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。如果您需要源代码,您也可以发送邮件。

    祝:工作顺利!

    发表于 @ 2004年09月04日 17:42:00|评论(loading...)|编辑

    新一篇: 如何使用.NET生成C#源代码 | 旧一篇: 如何在C#里面象js一样可以直接计算字符串的值

    评论

    #cuike519 发表于2004-09-06 23:03:00  IP: 202.106.160.*
    非常不好意思!文章中我也去对命名不严谨所以造成了你的迷惑,对文中你提到的几个问题我对文章做一些补充。
    1、CITY是在填充DataSet的时候的表明,也是最后产生的XML的根节点
    2、Table是是DataSet里面第一个Table的名字,因为我在程序里面没有指定默认Table的名字。
    3、city是Select表的时候里面的city字段。
    另外,XML是区分大小写的所以上面这种写法虽然有些混乱但是没有错误!
    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © cuike519