Как я могу ограничить строку, если она больше, чем нужно? - PullRequest
3 голосов
/ 22 июля 2010

В настоящее время у меня есть строка, которую я хочу ограничить до 200 символов.

Я не знаю, как ее отформатировать, поэтому, если она меньше, она не изменится, но если ее больше, она обрежет ее.

Это элемент управления ListView, а не повторитель.Извините за это, моя ошибка.

<ItemTemplate>
<div class="portfolio_title">
<div class="custom_title">
<%# DataBinder.Eval(Container.DataItem, "Title")%></div>
</div>
<asp:Literal ID="LiteralArticle" runat="server"></asp:Literal>
<%# DataBinder.Eval(Container.DataItem, "Article")%><br />
<a href="NewsFull.aspx?id=<%# DataBinder.Eval(Container.DataItem, "id")%>">Read Full Article...</a>
<div class="page_line">
</div>
</ItemTemplate>

Ответы [ 4 ]

3 голосов
/ 22 июля 2010

Вот код, который я использую для такого рода вещей. Присоедините это к событию OnRowDataBound. Это усекает до 50 символов и добавляет символы "...".

protected void CommentGridViewRowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            TableCell cell = e.Row.Cells[0];

            if (!string.IsNullOrEmpty(cell.Text) && cell.Text.Length > 50)
            {
                cell.Text = cell.Text.Substring(0, 50) + "&hellip;";
            }
        }
    }
1 голос
/ 22 июля 2010

Возможно, это немного больше, чем нужно, но в большинстве случаев у меня хорошо работает. Он сохраняет окончание файла, если вы имеете дело с файлами, и добавляет «...» в конец кратчайшей строки, если хотите.

    /// <summary>
    /// Shortens a long string. Optionally keeps the file ending and adds a placeholder at the end.
    /// </summary>
    /// <example>
    /// Input:  ThisIsAVeryLongFilenameForThisTest.doc (length=10, placeholder='...', saveFileEnding=true)
    /// Output: ThisIsAVeryLong
    /// </example>
    /// <param name="value"></param>
    /// <param name="length"></param>
    /// <param name="placeHolder"></param>
    /// <param name="saveFileEnding"></param>
    /// <returns></returns>
    public static string ShowSummary(string value, int length, string placeHolder, bool saveFileEnding)
    {
        int lengthNew = length;
        string fileEnding = "";

        //nothing to do if the string is short enough
        if (length > value.Length)
        {
            return value;
        }

        if (saveFileEnding)
        {
            int index = value.LastIndexOf(".");

            if (index != -1)
            {
                fileEnding = value.Substring(index);
                lengthNew = length - fileEnding.Length;
            }
        }

        //substract the length of the placeholder
        lengthNew = lengthNew - placeHolder.Length;

        if (lengthNew > 0)
        {
            return value.Substring(0, lengthNew) + placeHolder + fileEnding;
        }
        else
        {
            //something is weird, maybe a really long filending or a '.' in the filename, so just cut it down 
            return value.Substring(0, length);
        }
    }//ShowSummary
1 голос
/ 22 июля 2010

Я предполагаю, что это происходит в сетке или что-то ... Я бы вызвал функцию и передал ваш Eval в качестве аргумента:

Мой пример:

<asp:Image ID="imgTopLevelTickCross" runat="server" ImageUrl='<%# "/images/" &  getImage(Eval("DrwgID").toString()) & ".gif" %> ' />

ImageURL вызывает getImage и передает ему значение Eval ("DrwgID") для формирования пути src

Public Function getImage(ByVal drwgID As Integer) As String


If TopLevelDrwgID = drwgID Then

        Return "True"
    Else
        Return "blank"
    End If
End Function
1 голос
/ 22 июля 2010

Ты имеешь в виду как ...

int maxLength = 200;
string trimmed = (trimmed.length > maxLength) ? trimmed.Substring(0,maxlength) : trimmed ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...