.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"