我在ASP.NET gridview列中显示长文本时遇到问题。我不希望文本换行到第二行,因为它是业务要求不包装的。
理想情况下,我想要某种基于服务器或客户端的代码,这可以帮助我将文本截断为列的大小,然后可能会显示更多按钮或“...”以获取更多文本?
点击更多按钮或...时;弹出窗口显示文本的其余部分或全文。
注意:文本或字符串大小各不相同,长度可以是25到75个字符。
关于如何实现上述目标的任何想法?感谢
答案 0 :(得分:5)
将此CSS类用于gridview列
.ellipsis {
white-space: nowrap;
text-overflow: ellipsis;
width: 50px;
display: block;
overflow: hidden;
}
它将...放在特定宽度的列的末尾。
<强> 标记 强>
<asp:GridView ID="GridView1" runat="server" DataSourceID="SqlDataSource1"
AutoGenerateColumns="False" CssClass="employees-grid">
<Columns>
<asp:BoundField DataField="id" HeaderText="ID">
<ItemStyle CssClass="employees-grid-id" />
</asp:BoundField>
<asp:BoundField DataField="first_name" HeaderText="First Name">
<ItemStyle CssClass="employees-grid-first-name" />
</asp:BoundField>
<asp:BoundField DataField="last_name" HeaderText="Last Name">
<ItemStyle CssClass="employees-grid-last-name" />
</asp:BoundField>
<asp:BoundField DataField="email" HeaderText="Email">
<ItemStyle CssClass="employees-grid-email" />
</asp:BoundField>
<asp:BoundField DataField="note" HeaderText="Note">
<ItemStyle CssClass="employees-grid-note" />
</asp:BoundField>
</Columns>
</asp:GridView>
<强> CSS 强>
.employees-grid {
table-layout: fixed;
width: 100%;
}
.employees-grid-id {
width: 5%;
}
.employees-grid-first-name {
width: 10%;
}
.employees-grid-last-name {
width: 10%;
}
.employees-grid-email {
width: 15%;
}
.employees-grid-note {
width: 100%;
white-space: nowrap;
text-overflow: ellipsis;
display: block;
overflow: hidden;
}
答案 1 :(得分:0)
如果您担心格式化,我会构建我的查询(您将GridView绑定到的那个),以便以两种形式返回数据。
Select Left(dataColumn, 20) as TruncatedData, dataColumn as FullData From table
然后,您可以将GridView绑定到TruncatedData列,并将工具提示绑定到FullData列,这样当它们悬停时,它们将获得完整的列数据。我将BoundField
转换为TemplateField
,然后填写:
<asp:templatefield>
<itemtemplate>
<asp:label id="lblData"
Text= '<%# Eval("TruncatedData") %>'
runat="server"
ToolTip='<%# Eval("FullData") %>' />
</itemtemplate>
</asp:templatefield>
答案 2 :(得分:0)
您应该发布您尝试过的代码,以便人们可以提出更改/改进等等。无论如何,我必须编写一个代码,按照您要查找的内容进行操作,所以这里有它
private string[] truncateText(string iniText, int colNumber, int noAddRows)
{
string[] outStrings = new string[noAddRows + 3];
if (noAddRows == 0)
{
outStrings = new string[22];
}
outStrings[1] = iniText;
int addBit = 10;
int maxLength = (int)GridView1.Columns[colNumber].ItemStyle.Width.Value + addBit;
int linesCount = 1;
if (iniText.Length > maxLength)
{
outStrings[1] = iniText.Substring(0, maxLength); //New truncated string
outStrings[2] = iniText.Substring(maxLength, iniText.Length - maxLength); //Remaining bit
linesCount = 2;
if (noAddRows > -1 && outStrings[2].Length > maxLength)
{
//Further lines of the truncated bit
string remBit = outStrings[2].Substring(maxLength, outStrings[2].Length - maxLength);
outStrings[2] = outStrings[2].Substring(0, maxLength);
while (remBit.Length > 0)
{
linesCount = linesCount + 1;
if ((noAddRows > 0 && linesCount > noAddRows + 2) || linesCount > 20)
{
linesCount = linesCount - 1;
if (remBit.Length > 0)
{
outStrings[linesCount] = outStrings[linesCount] + remBit;
}
break;
}
if (remBit.Length <= maxLength)
{
outStrings[linesCount] = remBit;
break;
}
else
{
outStrings[linesCount] = remBit.Substring(0, maxLength);
remBit = remBit.Substring(maxLength, remBit.Length - maxLength);
}
}
}
}
outStrings[0] = Convert.ToString(linesCount); //Total number of lines
return outStrings;
}
您可以这样称呼它:
string[] truncatedLines = truncateText("text to truncate", colNo, noAdd);
输出string[]
包含截断的所有行,使得它们适合给定列的宽度+一小部分(addBit
,我设置为10)。使用noAddRows
参数可以控制所需的行数作为输出:如果设置为零,则根据给定的列宽度返回所需的行数。数组的0位置保留为返回的总行数。
我想您使用此代码完全控制您要实现的功能时,您不会发现任何问题。