GridView внутри Ширина колонки повторителя - PullRequest
0 голосов
/ 04 января 2010

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

Вот мой код повторителя:

<asp:Repeater ID="rptResults" runat="server" OnItemDataBound="rptResults_ItemDataBound">
    <ItemTemplate>
        <div style="width: 1100px; overflow: scroll;">
            <asp:GridView ID="gvResults" runat="server" BackColor="LightGoldenrodYellow" BorderColor="Tan"
                BorderWidth="1px" CellPadding="2" ForeColor="Black" GridLines="None">
                <FooterStyle BackColor="Tan" Wrap="false" />
                <RowStyle Wrap="false" />
                <PagerStyle BackColor="PaleGoldenrod" ForeColor="DarkSlateBlue" HorizontalAlign="Center"
                    Wrap="false" />
                <SelectedRowStyle BackColor="DarkSlateBlue" ForeColor="GhostWhite" Wrap="false" />
                <HeaderStyle BackColor="Tan" Font-Bold="True" Wrap="false" />
                <AlternatingRowStyle BackColor="PaleGoldenrod" Wrap="false" />
            </asp:GridView>
            <asp:Label runat="server" ID="lblNoRecords" Visible="false"></asp:Label>
        </div>
        <br />
    </ItemTemplate>
</asp:Repeater>

У меня есть привязка к повторителю:

    rptResults.DataSource = results.Tables;
    rptResults.DataBind();

У меня есть следующее для привязки GridView для каждой таблицы:

protected void rptResults_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
            {
                var o = e.Item.DataItem as DataTable;
                if (o.Rows.Count == 0)
                {
                    var lblNoRecords = (Label) e.Item.FindControl("lblNoRecords");
                    lblNoRecords.Text = "No Records";
                    lblNoRecords.Visible = true;
                }
                else
                {
                    var gv = (GridView)e.Item.FindControl("gvResults");
                    gv.DataSource = o;

                    gv.DataBind();    
                }

            }
        }

Возвращаемые данные могут измениться, поскольку это хранимая процедура, которая всегда будет возвращать n таблиц.

Я хотел бы попытаться вернуть мои столбцы к автоматическому размеру на основе возвращаемых данных. Прямо сейчас он объединяет большую часть данных, включая данные о дате / времени.

Не могу понять, как это сделать.

Мысли

Ответы [ 2 ]

2 голосов
/ 05 января 2010

Извините, если это не имеет значения, но я читаю между строк вашего вопроса и задаюсь вопросом, пытаетесь ли вы просто заставить определенные столбцы (например, столбцы даты / времени) не оборачивать их содержимое, таким образом откладывая перенос в другие столбцы (например, текстовые столбцы)? Браузер, как правило, старается расположить HTML-таблицу оптимально. Если вы хотите, чтобы некоторые столбцы не переносились, вы можете использовать свойство CSS white-space: nowrap.

В GridView, использующем ItemTemplate, есть свойство Wrap = "False":

<ItemTemplate>
    <asp:Label ID="Label1" runat="server" Text='<%# Bind("Data") %>'></asp:Label>
</ItemTemplate>
<ItemStyle Wrap="False" />

Если вы хотите использовать автоматически сгенерированные столбцы, вам придется обрабатывать соответствующие события в каждом сгенерированном GridView, а затем устанавливать атрибуты в выделенном коде. Что-то вроде:

protected void GridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
    e.Row.Cells[2].Attributes.Add("style", "white-space: nowrap;");
}

Очевидно, вам сначала нужно определить, относятся ли данные связанного столбца к типу, для которого вы хотите запретить перенос.

Выше приведен худший вариант развития событий; вам может сойтись с обработкой событий, которые запускаются не так часто (возможно, для каждого столбца), но я не уверен, сработает ли это в вашей ситуации.

Если вы хотите, чтобы вся таблица не была перенесена, вы можете просто установить свойство CSS на своей странице для всех table.tr.td элементов.

0 голосов
/ 12 апреля 2012

это то, что у меня сработало

<asp:GridView ID="SomeGridView"  CssClass="gridtext" > 

.gridtext  
{
    white-space: nowrap;
}

.gridtext table
{
    white-space: nowrap;
}
.gridtext tr
{
    white-space: nowrap;
}
.gridtext td
{
    white-space: nowrap;
}

.gridtext th
{
    white-space: nowrap;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...