C# .NET GridView-能否仅将一列右对齐?
在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事件右对齐
<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;
}
}
}