GridView со слишком большим количеством текста - PullRequest
3 голосов
/ 23 июня 2011

У меня есть GridView, который извлекает данные из базы данных и автоматически заполняет ее поля.

<asp:GridView ID="gvData" runat="server" CellPadding="4" 
        ForeColor="#333333" GridLines="None" AllowPaging="True" AutoGenerateDeleteButton="True" 
        AutoGenerateEditButton="True" DataSourceID="DS" PageSize="1"  CssClass="q">
        <RowStyle BackColor="#F7F6F3" ForeColor="#333333" Height="20"  CssClass="q"/>
        <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
        <PagerStyle BackColor="#284775" ForeColor="White" />
        <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
        <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
        <EditRowStyle BackColor="#999999" Height="15px" />
        <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
    </asp:GridView>
    <asp:SqlDataSource ID="DS" runat="server"></asp:SqlDataSource>

Некоторые поля слишком длинные. Есть ли способ сократить длину текста и вставить кнопку, которая открывает новое окно с текстом? Сетка также генерирует кнопки «Редактировать» и «Удалить». Нажатие на кнопку «Правка» дает мне маленькие текстовые поля. Как я могу обойти их, чтобы сделать ту же кнопку с всплывающим окном для редактирования?

Другой способ, о котором я подумал, - это создание текстовой области с полосой прокрутки. Я знаю, как добавить поле с полосой прокрутки вручную, но оно создается как метка, поэтому, когда я нажимаю «Редактировать», это поле недоступно для редактирования. И снова, это руководство, но мой gridview автоматически заполняется. Как можно автоматически заполнять большие поля текстовыми областями с полосами прокрутки?

Любая помощь будет принята с благодарностью! Спасибо!


Хорошо, я нашел решение для сокращения текста:

protected void gvData_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        for (int i = 0; i < e.Row.Cells.Count; i++)
        {
            ViewState["OrigData"] = e.Row.Cells[i].Text;
            if (e.Row.Cells[i].Text.Length >= 30)
            {
                e.Row.Cells[i].Text = e.Row.Cells[i].Text.Substring(0, 30) + "...";
                e.Row.Cells[i].ToolTip = ViewState["OrigData"].ToString();
            }
        }

    }

} 

Затем добавьте OnRowDataBound = "gvData_RowDataBound":

<asp:GridView ID="gvData" runat="server" CellPadding="4" ForeColor="#333333"
 GridLines="None" AllowPaging="True" AutoGenerateDeleteButton="True"
 AutoGenerateEditButton="True" DataSourceID="DS" PageSize="1"  
 OnRowDataBound="gvData_RowDataBound">   

Это сокращает длину до 30 символов и отображает полный текст во всплывающей подсказке.

Ответы [ 2 ]

1 голос
/ 05 июля 2011

Ответ на вторую часть:

    protected void gvData_PreRender(object sender, EventArgs e)
{
    if (this.gvData.EditIndex != -1)
    {
        TextBox tb = new TextBox();

        for (int i = 0; i < gvData.Rows[gvData.EditIndex].Cells.Count; i++)
            try
            {
                tb = (TextBox)
                    gvData.Rows[gvData.EditIndex].Cells[i].Controls[0];

                if (tb.Text.Length >= 30)
                {
                    tb.TextMode = TextBoxMode.MultiLine;
                }
            }
            catch { }
         }
}
1 голос
/ 23 июня 2011

взгляните на этот пост, я думаю, что он может быть полезен.

http://social.msdn.microsoft.com/forums/en-US/winformsdatacontrols/thread/051887c6-2d87-4361-a5a1-cd5213609673/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...