原代码如下:
<asp:DataList ID="datresult" runat="server" Width="636px" OnItemCreated="datresult_ItemCreated" OnItemDataBound="datresult_ItemDataBound">
                        <ItemTemplate>
                            <table>
                                <tr>
                                    <td style="width: 186px; height: 17px;">
                                        </td>
                                    <td style="width: 557px; height: 17px;">
                                        <asp:Label ID="lbltitle" runat="server" Width="533px"><%#Eval("CON_TITLE")%></asp:Label></td>
                                </tr>
                                <tr>
                                    <td style="width: 186px; height: 6px;">
                                        </td>
                                    <td style="width: 557px; height: 6px;">
                                        <asp:Label ID="lbldesc" runat="server" Width="535px"><%#Eval("CON_DESC")%></asp:Label></td>
                                </tr>
                                <tr>
                                    <td colspan="2" style="height: 2px">
                                        <hr />
                                    </td>
                                </tr>
                            </table>
                        </ItemTemplate>
                    </asp:DataList>
我想通过Eval函数绑定数据,但我想对其中之一的数据进行截断字符串的操作,我的操作语句如下:
protected void datresult_ItemDataBound(object sender, DataListItemEventArgs e)
    {
        if (e.Item.FindControl("lbldesc") as Label != null)
        {
            if ((e.Item.FindControl("lbldesc") as Label).Text.Length > 30)
            {
                (e.Item.FindControl("lbldesc") as Label).ToolTip = (e.Item.FindControl("lbldesc") as Label).Text;
                (e.Item.FindControl("lbldesc") as Label).Text = (e.Item.FindControl("lbldesc") as Label).Text.Substring(0, 30) + "...";
            }
        }
}
可是根本不起任何作用,请教下如何操作,我的语句对的吗?
还有就是如何实现针对有条件模糊查询的关键字查询,我要让查询结果类似于baidu搜索那样,将查询的匹配词条以红色显示,急着等答案,谢谢大家了

解决方案 »

  1.   

    ItemDataBound事件里
    e.Item.Cells[0].Text = "·";
    e.Item.Cells[1].ToolTip = e.Item.Cells[1].Text;
    e.Item.Cells[1].Text="<a href=ShowNews.aspx?newsid=" + e.Item.Cells[2].Text + ">" + e.Item.Cells[1].Text.Length > 18 ? e.Item.Cells[1].Text.Substring(0,18) + "...":e.Item.Cells[1].Text) + "</a>";
      

  2.   

    <%# 函数名(Eval("CON_DESC").ToString())%>
    CS里
     函数名(string str)
    {
        if(str.Length>10)
           return str.subString(0,18);
        else
           return str;}
      

  3.   

    public void 函数名(string str)
      

  4.   

    非常谢谢!但还是不行,这个是C#代码吗?
    还有纠正下3楼的函数既然有返回值旧不能用void了
      

  5.   

    protected void datresult_ItemDataBound(object sender, DataListItemEventArgs e)
        {
           //if (e.Item.FindControl("lbldesc") as Label != null)
           //{
           //    if ((e.Item.FindControl("lbldesc") as Label).Text.Length > 30)
           //    {
           //        (e.Item.FindControl("lbldesc") as Label).ToolTip = (e.Item.FindControl("lbldesc") as Label).Text;
           //        (e.Item.FindControl("lbldesc") as Label).Text = (e.Item.FindControl("lbldesc") as Label).Text.Substring(0, 30) + "...";
           //    }
           //}
           //Response.Write((e.Item.FindControl("lbldesc") as Label).Text.Length);
                      e.Item.Cells[0].Text = "·";
    e.Item.Cells[1].ToolTip = e.Item.Cells[1].Text;
    e.Item.Cells[1].Text="<a href=ShowNews.aspx?newsid=" + e.Item.Cells[2].Text + ">" + e.Item.Cells[1].Text.Length > 18 ? e.Item.Cells[1].Text.Substring(0,18) + "...":e.Item.Cells[1].Text + "</a>";
        }结果报错 
    编译器错误信息: CS0117: “System.Web.UI.WebControls.DataListItem”并不包含“Cells”的定义
      

  6.   

    后台写了
    public string SubStr(string str)
        {
            if (str.Length > 10)
                return str.Substring(0, 30);
            else
                return str;
        }
    前台调用:
    <asp:Label ID="lbldesc" runat="server" Width="535px"><%#Substr(Eval("CON_DESC")).ToString%></asp:Label>结果报错:
    编译器错误信息: CS0103: 当前上下文中不存在名称“Substr”
    这个我倒想试试好象可以将后台代码直接写前台是否可以成功? 改如何写? 请指教
      

  7.   

    <%#Substr(Eval("CON_DESC").ToString())%>
      

  8.   

    汗!~~~~`
    原来这样,改了后调试仍然还有问题:编译器错误信息: CS1502: 与“cms_selresult.SubStr(string)”最匹配的重载方法具有一些无效参数Eval("CON_DESC") 查询返回了一个类似DataRow的集合无法强转为String
      

  9.   

    <%# SubStr(DataBinder.Eval(Container,"DataItem.content").ToString()) %>这样写呢?
      

  10.   

    OK,Thank you very much.
    问题解决了,非常谢谢,还有个疑问我如何指定截断数据的tooltip
    对了顺便问一下,如果我要让查询的关键字结果为红色类似于baidu搜索一样该怎样做?
      

  11.   

    你的数据是放在label 里的,你可以设置label的tooltip
    试试看`
      

  12.   

    str.Respace("datalist","<font color='red'>datalist</font>");呵呵,不知道这样可不可以?
      

  13.   

    <asp:DataList ID="datresult" runat="server" Width="636px" OnItemCreated="datresult_ItemCreated" OnItemDataBound="datresult_ItemDataBound">
                            <ItemTemplate>
                                <table>
                                    <tr>
                                        <td style="width: 186px; height: 17px;">
                                            </td>
                                        <td style="width: 557px; height: 17px;">
                                            <asp:Label ID="lbltitle" runat="server" Width="533px" ToolTip='<%# Eval("CON_TITLE") %>' ForeColor="Black"><%# Eval("CON_TITLE") %></asp:Label></td>
                                    </tr>
                                    <tr>
                                        <td style="width: 186px; height: 6px;">
                                            </td>
                                        <td style="width: 557px; height: 6px;">
                                            <asp:Label ID="lbldesc" runat="server" Width="535px" ToolTip='<%# DataBinder.Eval(Container,"DataItem.CON_DESC") %>' ForeColor="#404040"><%# SubStr(DataBinder.Eval(Container,"DataItem.CON_DESC").ToString()) %></asp:Label></td>
                                    </tr>
                                    <tr>
                                        <td colspan="2" style="height: 2px">
                                            <hr />
                                        </td>
                                    </tr>
                                </table>
                            </ItemTemplate>
                        </asp:DataList>
    其中lbltitle是标题
        lbldesc是内容刚才的lbldesc的tooltip出不来
      

  14.   

    lbltitle  的tooltip 可以显示
    lbldesc  的不可以是吧?
    <%# Eval("CON_DESC") %>
    这样写呢?
      

  15.   

    搜索结果 
    (该部分用Gridview VS2005显示以示区别)
    内容标题 内容描述   
    分公司简介 222 30 
    NHDR 2005 Launched The developmental goal set by ... 123 (原代码输出结果)
     分公司简介 
     222 --------------------------------------------------------------------------------
     NHDR 2005 Launched 
     The developmental goal set by ... --------------------------------------------------------------------------------
    .......不能截图出来看不到效果
      

  16.   

    lbltitle  的tooltip 可以显示
    lbldesc  的不可以是吧?
    <%# Eval("CON_DESC") %>
    这样写呢?
      

  17.   

    是两个label的tooltip都不出来吗?
      

  18.   

    这个查询的关键字出现在结果的标题或者正文中,Replace只能全部替换为红色,我的只要搜索的关键字为红色,是不是得先把逐个判断字符,匹配的内容才能加红色,然后将这段内容和除去的内容一起组成新的字符串并输出?
      

  19.   

    不是,只有一个出不来,是刚才截断的那个,这个label匹配了两行记录
      

  20.   

    CS里
    public string 函数名(string str)
    {
      //例如查询 张三
        str.Respace("张三","<font color =red>张三</font>");
        return str;
    }aspx里
    <%# 函数名(DataBinder.Eval(Container,"DataItem.CON_DESC").ToString()) %>
      

  21.   

    我把两个效果写在同一个页面结果红色的字出不来
    public string SubStr(string str)
        {
            string key = txtoption.Text;
            string keyadd = "<font color=red>" + key + "</font>";
            //输出key,发现没问题,也非获取不到
            Response.Write(key);
            str.Replace(key, keyadd);
            if (str.Length > 30)
                return str.Substring(0, 30)+"...";
            else
                return str;
        }
      

  22.   

    public string SubStr(string str)
        {
            string key = txtoption.Text;
            string keyadd = "<font color=red>" + key + "</font>";
            //输出key,发现没问题,也非获取不到
            Response.Write(key);       
            if (str.Length > 30)
                str=str.Substring(0, 30)+"...";       return str.Replace(key, keyadd);    }
      

  23.   

    str = str.Replace(key, keyadd);
    这样你才能获得替换的字符串
      

  24.   

    好问题解决了
    在str.Replace(key, keyadd);前面加个赋值
    即:
    str=str.Replace(key, keyadd);
    就ok了
    谢谢了
    现在,给分结贴,呵呵