C# .NET GridView-能否仅将一列右对齐?

C# .NET GridView-能否仅将一列右对齐?,c#,asp.net,gridview,C#,Asp.net,Gridview,在GridView中,您能否轻松地右对齐一列 我有这个 <asp:GridView ID="GridView1" runat="server"></asp:GridView> 它绑定到具有许多列的数据表(动态生成)。我只想让“价格”列右对齐 (遇到这个问题,我想知道我是否应该打印HTML而不是使用GridView。使用HTML我可以完全控制。)是的,你可以,但我认为如果你将自动生成列设置为true(默认情况下为true)然后需要使用RowDataBound事件右对齐

在GridView中,您能否轻松地右对齐一列

我有这个

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

它绑定到具有许多列的数据表(动态生成)。我只想让“价格”列右对齐

(遇到这个问题,我想知道我是否应该打印HTML
而不是使用GridView。使用HTML我可以完全控制。)

是的,你可以,但我认为如果你将
自动生成列设置为true(默认情况下为true)然后需要使用
RowDataBound
事件右对齐列。作为旁注,如果更容易,您可以将
AutoGenerateColumns
设置为false并使用,这将为您提供更多格式选项,并且可能消除对
RowDataBound
事件的需要

GridView:

<asp:GridView ID="GridView1" OnRowDataBound="GridView1_RowDataBound" runat="server"></asp:GridView>
希望有帮助。


<Columns>
...
    <asp:BoundField DataField="Price" HeaderText="Price" 
        ItemStyle-HorizontalAlign="Right" ItemStyle-Width="80" />
...
</Columns>
... ...
将ItemTemplate中的项目括在一个div中,然后将样式设置为该div

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

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

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

您可以使用ItemStyle在Boundfield内执行对齐-

像这样:

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


这对我来说很有用,因为我只需要在gridview中对齐特定的列

您是否在
gridview
的第一行中添加了此选项

OnRowDataBound="GridView1_RowDataBound" 

尽管这个问题很久以前就发布了,但这可能会帮助你碰巧来到这个页面的人

给出的答案假设将应用对齐的列的索引是预先知道的,或者这些列是在.aspx页面的设计时创建的;但情况并非总是如此

对于正在寻找一种通用解决方案的人,其中列是自动生成的,列的索引,标题“Price”是事先未知的,这里有一个解决方案

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;
        }
   }
}
protectedvoid grData\u RowDataBound(对象发送方,GridViewRowEventArgs e)
{
如果(e.Row.RowType==DataControlRowType.DataRow)
{
inti=((DataTable)((GridView)sender.DataSource).Columns.IndexOf(“Price”);
对于(int j=0;j
对价格列使用右对齐的模板字段。可能吗?这将添加一个额外的列,而不是像这样在标记中格式化我想要的列。除非您有特定的原因希望在代码隐藏中执行此操作?要使用此方法,您需要将AutoGenerateColumns设置为false,并手动添加标记中的所有列。缺点是打字太多。这样做的好处是,您可以更好地控制格式,而不必求助于代码隐藏。就我个人而言,我觉得使用边界字段是一种更好的方法。AutoGenerateColumns是我使用GridView的原因。我宁愿打印出HTML(并拥有完全控制权),也不愿使用禁用AutoGenerateColumns的GridView。你觉得怎么样?@aximili,如果你想要更干净的HTML,请放弃GridView,改用ListView。我现在只使用ListView是因为这个原因:)我明白了。。。是的,正如我所料,它不是很漂亮。AutoGenerateColumns是我使用GridView的原因。我宁愿打印HTML,也不愿使用禁用AutoGenerateColumns的GridView。谢谢这回答了我的问题:)
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;
        }
   }
}