.NET GridView - Вы можете выровнять по правому краю только один столбец? - PullRequest
12 голосов
/ 13 апреля 2011

Можете ли вы легко выровнять по правому краю только один столбец в GridView?

У меня есть это

<asp:GridView ID="GridView1" runat="server"></asp:GridView>

Он связан с DataTable (генерируется динамически), который имеет много столбцов.Я просто хочу, чтобы столбец «Цена» был выровнен по правому краю.

(Столкнувшись с этой проблемой, я задаюсь вопросом, стоит ли печатать HTML <table> вместо использования GridView. Используя HTML, я бытотальный контроль.)

Ответы [ 6 ]

21 голосов
/ 13 апреля 2011

Да, вы можете, но я думаю , если у вас AutoGenerateColumns установлено значение true (что по умолчанию), то вам нужно выровнять столбец по правому краю, используя событие RowDataBound.В качестве примечания: если проще, вы можете установить для AutoGenerateColumns значение false и использовать BoundFields , что предоставит вам больше возможностей форматирования и, вероятно, устранит необходимость в событии RowDataBound.

GridView:

<asp:GridView ID="GridView1" OnRowDataBound="GridView1_RowDataBound" runat="server"></asp:GridView>

Кодовый код:

protected void GridView1_RowDataBound(object o, GridViewRowEventArgs e)
{
    //Assumes the Price column is at index 4
    if(e.Row.RowType == DataControlRowType.DataRow)
        e.Row.Cells[4].HorizontalAlign = HorizontalAlign.Right;
}

Надеюсь, это поможет.

13 голосов
/ 13 апреля 2011
<Columns>
...
    <asp:BoundField DataField="Price" HeaderText="Price" 
        ItemStyle-HorizontalAlign="Right" ItemStyle-Width="80" />
...
</Columns>
1 голос
/ 08 декабря 2017

Даже несмотря на то, что вопрос задан давно, это может помочь кому-то, кто окажется на этой странице.

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

Для тех, кто ищет общее решение, в котором автоматически генерируются столбцы и индекс столбца с заголовком «Цена» , заранее неизвестного вот решение

protected void grData_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        int i = ((DataTable)((GridView)sender).DataSource).Columns.IndexOf("Price");
        for (int j = 0; j < e.Row.Cells.Count; j++)
        {
            if (j == i)
                e.Row.Cells[j].HorizontalAlign = HorizontalAlign.Right;
            else
                e.Row.Cells[j].HorizontalAlign = HorizontalAlign.Left;
        }
   }
}
0 голосов
/ 14 января 2017

Вы добавили это в первой строке GridView?

OnRowDataBound="GridView1_RowDataBound" 
0 голосов
/ 23 сентября 2016

Вы можете выполнить выравнивание внутри Boundfield, используя ItemStyle-

как это:

<asp:BoundField DataField="SOH" HeaderText="SOH" SortExpression="SOH" ItemStyle-HorizontalAlign="Right"/>

Это сработало для меня, когда мне нужно было выровнять только определенные столбцы в моем gridview

0 голосов
/ 16 сентября 2014

Поместите элемент в ItemTemplate в div, а затем установите стиль в div.

<ItemTemplate>
<div id="divReportName">
<asp:Label ID="lblReport" runat="server" ></asp:Label>
</div>
</ItemTemplate>

// css for div
#divReportName { text-align: left;}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...