Значение редактирования Gridview - PullRequest
0 голосов
/ 30 июня 2011

У меня есть сетка, которая динамически заполняется из базы данных. Некоторые поля довольно длинные. Я нашел способ сократить длину текста в ячейке. Теперь, когда я нахожусь в режиме редактирования, все поля находятся в однострочных текстовых полях, которые слишком малы для объема текста. Как я могу заменить texbox другим полем? Предпочтительно с <textarea></textarea>

<div style="overflow:auto;">
    <asp:GridView ID="gvData" OnRowDataBound="gvData_RowDataBound" OnRowEditing="gvData_RowEditing" runat="server" CellPadding="4" 
        ForeColor="#333333" GridLines="Vertical" AllowPaging="True" 
        AutoGenerateDeleteButton="True" AutoGenerateEditButton="True" DataSourceID="DS">
        <RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
        <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" />
        <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
    </asp:GridView>
    <asp:SqlDataSource ID="DS" runat="server"></asp:SqlDataSource>
</div>

protected void gvData_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        for (int i = 0; i < e.Row.Cells.Count; i++)
        {
            TextBox txtBox = new TextBox();

            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();
            }
            e.Row.Cells[i].Wrap = false;

        }
    }
}

Ответы [ 2 ]

1 голос
/ 02 июля 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 голос
/ 01 июля 2011

попробуйте следующий код

protected void gvData_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        for (int i = 0; i < e.Row.Cells.Count; i++)
        {
            TextBox txtBox = e.Row.Cells[i].Controls[0] as TextBox;
    txtBox.TextMode = TextBoxMode.MultiLine;

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