.NET GridView. Можно ли выровнять только один столбец?

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

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

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

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

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

Ответ 1

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

GridView:

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

Codebehind:

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;
}

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

Ответ 2

<Columns>
...
    <asp:BoundField DataField="Price" HeaderText="Price" 
        ItemStyle-HorizontalAlign="Right" ItemStyle-Width="80" />
...
</Columns>

Ответ 3

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

Приведенные ответы предполагают, что индекс столбца, к которому будет применяться выравнивание, известен заранее или столбцы создаются во время разработки на странице .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;
        }
   }
}

Ответ 4

Включите элемент в ItemTemplate в div, а затем установите стиль в div.

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

// css for div
#divReportName { text-align: left;}

Ответ 5

Вы можете выполнить выравнивание в пределах Boundfield с помощью ItemStyle -

вот так:

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

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

Ответ 6

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

OnRowDataBound="GridView1_RowDataBound"