截断ASP.NET GridView中的文本

时间:2014-09-16 21:49:09

标签: c# asp.net

这是GridView,它显示数据库中表的所有列和记录:

<asp:GridView ID="GridView1" runat="server" AllowPaging="true" BackColor="White" 
        BorderColor="#CCCCCC" BorderWidth="2px" CellPadding="2" CellSpacing="5"
        ForeColor="#000066" GridLines="None">
    <RowStyle BackColor="#F7F7F7" />
    <AlternatingRowStyle BackColor="#E7E7FF" />
    <FooterStyle BackColor="White" />
    <HeaderStyle BackColor="#006699" Font-Bold="True" ForeColor="White" />
    <PagerStyle BackColor="White" ForeColor="#000066" 
        HorizontalAlign="Center" />
    <SortedAscendingCellStyle BackColor="#F1F1F1" />
    <SortedAscendingHeaderStyle BackColor="#007DBB" />
    <SortedDescendingCellStyle BackColor="#CAC9C9" />
    <SortedDescendingHeaderStyle BackColor="#00547E" />
    <Columns>
        <asp:CommandField ShowSelectButton="true" HeaderStyle-ForeColor="Yellow"
            ControlStyle-ForeColor="Red" SelectText="Select" HeaderText="Select" />
    </Columns>
</asp:GridView>

代码背后:

public void ShowBooks()
{
    SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM Book", con);
    DataSet ds = new DataSet();
    da.Fill(ds);
    GridView1.DataSource = ds;
    GridView1.DataBind();
}

protected void Page_Load(object sender, EventArgs e)
{
    ShowBooks();
}

在此表中,名为Description的列包含大量文本。在GridView中,我想只显示10或20个第一个字符,然后是...(三个点)。当我将鼠标悬停在文本上时,我希望将全文显示为工具提示。

2 个答案:

答案 0 :(得分:4)

有两种解决方案可以做到这一点。解决方案在SQL端和代码端。

<强>首先

从数据库获取数据时截断描述列值。

SELECT SUBSTRING(Description, 0, 20) FROM Book

有关T-SQL中SUBSTRING函数的更多信息是here


<强>第二

您可以编写一种方法来裁剪字符串值并在GridView中使用它。不要忘记;要做到这一点,首先您应该将Description列字段转换为TemplateField

辅助类中的裁剪方法:

public static class StringHelper
{
    public static string Crop(this string text, int maxLength)
    {
        if (text == null) return string.Empty;

        if (text.Length < maxLength) return text;

        return text.Substring(0, maxLength);
    }
}

Aspx Side:

 <asp:TemplateField HeaderText="Description">               
           <ItemTemplate>
                <asp:Label ID="Label1" runat="server" Text='<%# StringHelper.Crop(Eval("Description").ToString(), 20) %>'></asp:Label>
           </ItemTemplate>
 </asp:TemplateField>

请注意:不要担心空值。执行null reference exception方法时,您将无法获得ToString()。我已经测试了。


<强>加成:

如果您不想使用上述选项truncate,则可以使用CSS word-wrap property

GridView上的“描述”列:

  

&LT;   asp:BoundField DataField =“Description”HeaderText =“Description”   ControlStyle-CssClass =“wrappedText”/&gt;

CSS定义:

.wrappedText { word-wrap: break-word; }

请注意,CSS类名为 wrappedText

答案 1 :(得分:2)

使用TemplateField,如下所示:

<asp:TemplateField HeaderText="Description">
    <ItemTemplate>
          <span title='<%#HttpUtility.HtmlEncode(Eval("Description").ToString)%>'><%#HttpUtility.HtmlEncode(Left(Eval("Description").ToString, 20)) + "..."%></span>
    </ItemTemplate>
</asp:TemplateField>

您可能需要检查并允许Description字段中的回车字符或单引号,因为这可能会破坏输出。