首页 新闻 会员 周边 捐助

怎么让Gridview每个单元显示Tooltip提示?

0
[已解决问题] 解决于 2008-12-25 19:33

由于Gridview里字段太多而且每个字段值有长,所以用Tooltip。开始没转为模板列,我是这样用的

Code

有效果,但我后来把所有列全部转为了模板,再这样没效果了。我在想是不是e.Row.Cells[i].Text 已经不得到单元格的值了?是不是要用FindControl("Label1")来找,但我那么多字段一个一个找好麻烦,还是想循环直接弄完。不知道有办法没?

开始旅途的主页 开始旅途 | 初学一级 | 园豆:194
提问于:2008-12-19 15:22
< >
分享
最佳答案
0

可以把DataItem取出来。如下:

string fullInfo = (((DataRowView)e.Row.DataItem)["lastMonthNum"]).ToString();

e.Row.Cells[i].ToolTip = fullInfo;

你不用从Text里取值。直接从DataItem里取。我这里绑定的是DataTable所以把DataItem转换成DataRowView

BB_Coder | 小虾三级 |园豆:797 | 2008-12-19 16:16
其他回答(5)
0

    <Columns>

                      <asp:TemplateField HeaderText="header" >

                          <ItemTemplate>

                              <asp:Label ID="Label1" runat="server" Text='<%#Eval("header")%>'       ToolTip='<%#GetSubString(Eval("header").ToString(), 50%>'  ></asp:Label>

                          </ItemTemplate>

                      </asp:TemplateField>

</Columns>

 

 

    public string GetSubString(string stringToSub, int length)

    {

        if (stringToSub.Length != 0)

        {

            if (stringToSub.Length <= length)

                return stringToSub;

            else

            {

                return stringToSub.Substring(0, length) + "..";

            }

        }

        else

        {

            return "";

        }

    }

 

West | 园豆:1095 (小虾三级) | 2008-12-19 15:27
0

你可以绑定到模板控件的tooltip中,再就是你说的FindControl!

GUO Xingwang | 园豆:3885 (老鸟四级) | 2008-12-19 15:33
0

直接绑定到模板控件的tooltip中

码尔代夫iimax | 园豆:3138 (老鸟四级) | 2008-12-19 20:23
0

其实可以换个思路,为什么一定要在服务器端实现呢?

这个效果完全可以在客户端实现的,只不过需要自己写一些脚本罢了。

下面给出实现思路:

GridView 在客户端解释执行之后 变成了
<table>
  <tr>
    <td></td>
            ...
  </tr>
      ...
</table>

如果要获取并显示数据的话,只要遍历 <td> ,然后加上相应的脚本事件 onMouseOver 与  onMouseOut,唯一的难点就是提示层的控制了,我们的要求是这个层跟随鼠标移动并且在鼠标停留的 td 附近显示 。
不过不用担心,已经有朋友替我们做好了这样的 ToolTip,见 http://huacn.blogbus.com/logs/19643877.html (这个 ToolTip 的效果比较酷) 。

效果在本机已经实现,看截图:(就不贴代码了,如果有问题的话,可邮件联系)

 这样的缺点是如果文字过长被截断的话,那么ToolTip 内的提示也一样,而通过服务器端实现则可以全部显示,这样做不算完美。
不过有个方式实现: 在GridView 控件内放置另外的标签如<span></span>(和模板列放在一起),把完整的数据值放在<span>内,再让<span>不显示(span{display:none}),ToolTip 显示数据时只要显示<span>内的数据就可以了。

希望有所帮助!

music000 | 园豆:150 (初学一级) | 2008-12-20 01:21

http://huacn.blogbus.com/logs/19643877.html    这个网址有访问限制,可以发个没有访问限制的吗?在线等,谢谢

支持(0) 反对(0) ET_elephant | 园豆:200 (初学一级) | 2016-06-23 09:32
0

实际上你用的label的tooltip就是这个标签的title而已

没有必要这样绑定个服务器控件

你前台就写成<span title="<%# Eval("header")%>"><%# Format(Eval("header"))%><span>

然后再后台写一个方法

  public string Format(object obj)
        {
            string s = "--";
            if (obj != null ^ string.IsNullOrEmpty(obj.ToString()))
            {
                //根据需求截取长度
                s = obj.ToString().Length > 13 ? obj.ToString().Substring(0, 13) : obj.ToString();
            }
            return s;
        }

至于那些更多tooltip的扩展 你可以使用js操作title就可以实现,当然如果你的tooltip里面想显示更过信息 值需要修改你的title的显示即可

Denuvead | 园豆:205 (菜鸟二级) | 2008-12-20 12:17
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册