none
想让dorpdownlist 像 datatextfiled datavaluefiled一样拥有 tooltip,请问如何做? RRS feed

  • 问题

  • 数据库
    id  khlx(考核类型)              js(解说)                              paixu(排序)
    1   定期工作考核           包括对*****工作的定期考核            1

    说明:有的时候考核类型要很多的字,如果是100个字的话那么放在dropdownlist中将是一个噩梦。所以此字段只是简单的写一句话,具体的解释放在解说字段
    我想当鼠标移到某个option上的时候调用tooltip,现实js(解说)字段内容,我试了一下两种方法都不行。郁闷。

            private void bind_Khlx()
            {
                DataTable ds_Khlx = db.execute_DataSet("mis_manager", "select * from khlx order by paixu asc").Tables[0];
                ddl_Khlx.DataSource = ds_Khlx;
                ddl_Khlx.DataTextField = "khlx";
                ddl_Khlx.DataValueField = "id";
                //ddl_Khlx.ToolTip="js"//第一种:这个根本不行,郁闷
                ddl_Khlx.DataBind();
                foreach (ListItem item in ddl_Khlx.Items)
                {
                    item.Attributes.Add("Title", "第二种:这里我想绑定数据库的js字段,不知如何写"); 
                }  

            }



    或者有没有什么方法构造一个div,当鼠标移到上面的时候想微软webcast日历一样在右面弹出一个div,现实数据库中js字段的文字。请各位指点。

    2010年1月24日 13:58

答案

  • 你好,

    参考下面这种做法试试。

     protected void Page_Load(object sender, EventArgs e)
        {
            if (!this.IsPostBack)
            {
                this.DropDownList1.DataSource = this.GenerateDT;
                this.DropDownList1.DataTextField = "Test1";
                this.DropDownList1.DataValueField = "Test2";
                this.DropDownList1.DataBind();
                for (int i = 0; i < this.GenerateDT.Rows.Count;i++ )
                {
                    this.DropDownList1.Items[i].Attributes.Add("title",this.GenerateDT.Rows[i]["Test3"].ToString());
                }
               
                
            }
        }
    
      public DataTable GenerateDT
        {
            get
            {
                if (ViewState["ds"] != null)
                {
                    return (ViewState["ds"] as DataSet).Tables[0];
    
                }
                else
                {
                    DataTable dt = new DataTable();
                    dt.Columns.Add("Test1", typeof(string));
                    dt.Columns.Add("Test2", typeof(string));
                    dt.Columns.Add("Test3", typeof(string));
                    DataRow dr1 = dt.NewRow();
                    dr1[0] = "test1";
                    dr1[1] = "test2";
                    dr1[2] = "test3";
                    dt.Rows.Add(dr1);
                    DataRow dr2 = dt.NewRow();
                    dr2[0] = "test1";
                    dr2[1] = "test2";
                    dr2[2] = "test3";
                    dt.Rows.Add(dr2);
                    DataSet ds = new DataSet();
                    ds.Tables.Add(dt);
                    ViewState["ds"] = ds;
                    return dt;
    
                }
            }
        }

    Microsoft Online Community Support
    • 已标记为答案 杜宏宇 2010年1月27日 9:18
    2010年1月26日 2:11
  • 您好,我试了,在ie8小没问题。但我们单位电脑全是ie6,怎么显示不出来呢?

    这种方式在 i6 下是不支持的。如果要兼容所有浏览器,可能只有自己写控件了。
    知识改变命运,奋斗成就人生!
    • 已标记为答案 杜宏宇 2010年1月27日 9:18
    2010年1月26日 6:39
    版主
  • 如果只是小范围使用,可以建议大家升级到 ie8。
    知识改变命运,奋斗成就人生!
    • 已标记为答案 杜宏宇 2010年1月27日 9:18
    2010年1月26日 6:39
    版主

全部回复

  • 你好,

    参考下面这种做法试试。

     protected void Page_Load(object sender, EventArgs e)
        {
            if (!this.IsPostBack)
            {
                this.DropDownList1.DataSource = this.GenerateDT;
                this.DropDownList1.DataTextField = "Test1";
                this.DropDownList1.DataValueField = "Test2";
                this.DropDownList1.DataBind();
                for (int i = 0; i < this.GenerateDT.Rows.Count;i++ )
                {
                    this.DropDownList1.Items[i].Attributes.Add("title",this.GenerateDT.Rows[i]["Test3"].ToString());
                }
               
                
            }
        }
    
      public DataTable GenerateDT
        {
            get
            {
                if (ViewState["ds"] != null)
                {
                    return (ViewState["ds"] as DataSet).Tables[0];
    
                }
                else
                {
                    DataTable dt = new DataTable();
                    dt.Columns.Add("Test1", typeof(string));
                    dt.Columns.Add("Test2", typeof(string));
                    dt.Columns.Add("Test3", typeof(string));
                    DataRow dr1 = dt.NewRow();
                    dr1[0] = "test1";
                    dr1[1] = "test2";
                    dr1[2] = "test3";
                    dt.Rows.Add(dr1);
                    DataRow dr2 = dt.NewRow();
                    dr2[0] = "test1";
                    dr2[1] = "test2";
                    dr2[2] = "test3";
                    dt.Rows.Add(dr2);
                    DataSet ds = new DataSet();
                    ds.Tables.Add(dt);
                    ViewState["ds"] = ds;
                    return dt;
    
                }
            }
        }

    Microsoft Online Community Support
    • 已标记为答案 杜宏宇 2010年1月27日 9:18
    2010年1月26日 2:11
  • 您好,我试了,在ie8小没问题。但我们单位电脑全是ie6,怎么显示不出来呢?

    2010年1月26日 6:34
  • 您好,我试了,在ie8小没问题。但我们单位电脑全是ie6,怎么显示不出来呢?

    这种方式在 i6 下是不支持的。如果要兼容所有浏览器,可能只有自己写控件了。
    知识改变命运,奋斗成就人生!
    • 已标记为答案 杜宏宇 2010年1月27日 9:18
    2010年1月26日 6:39
    版主
  • 如果只是小范围使用,可以建议大家升级到 ie8。
    知识改变命运,奋斗成就人生!
    • 已标记为答案 杜宏宇 2010年1月27日 9:18
    2010年1月26日 6:39
    版主