水平在网格视图中动态对齐
本文关键字:动态 对齐 视图 网格 水平 | 更新日期: 2023-09-27 18:35:28
我在 asp.net 页面上有一个GrdiView
。我正在将数据源设置为DataTable
。如果单元格中的值是字符串类型,我需要将HorizontalAlign
设置为左,否则如果它是小数,我希望它向右对齐。请让我知道如何实现这一点。GridView
的代码如下:
<asp:GridView ID="gridViewReport" runat="server" Height="1px" OnRowDataBound="UsersGVRowDataBound" GridLines="both" Style="z-index: 100;
left: 2px; position: absolute; top: 1px; " Width="939px" CellPadding="4" ForeColor="#333333" AllowSorting="True" OnSorting="gridViewReport_Sorting" Font-Names="Verdana" Font-Size="12px" OnSelectedIndexChanged="gridViewReport_SelectedIndexChanged1">
<AlternatingRowStyle BackColor="White" />
<RowStyle HorizontalAlign="Left" BackColor="#EFECE5" />
<FooterStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="#666666" ForeColor="White" HorizontalAlign="Center" />
<SelectedRowStyle BackColor="#C0F6C0" ForeColor="#333333" Font-Bold="True" />
<HeaderStyle BackColor="#CDE472" Font-Bold="True" ForeColor="DarkGreen" HorizontalAlign ="Left" Font-Italic="False" Font-Names="Verdana" Font-Overline="False"/>
<EditRowStyle BackColor="#EAEAAE" />
</asp:GridView>
此外,设置DataSource
的代码如下:
gridViewReport.DataSource = _reportTable;
gridViewReport.DataBind();
如果每列都包含相同类型的数据,您已经知道哪些列带有十进制,哪些列没有
因此,考虑到您的DataTable
有两列,第一列携带字符串,第二列携带十进制,您可以这样做
protected void gridViewReport_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
e.Row.Cells[0].HorizontalAlign = HorizontalAlign.Left;
e.Row.Cells[1].HorizontalAlign = HorizontalAlign.Right;
}
}
否则,如果您的列包含的文本可以是小数或字符串,您可以执行此操作(例如DataTable
中的第二列包含可能包含十进制格式的文本)
protected void gridViewReport_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
decimal val;
if(decimal.TryParse(e.Row.Cells[1].Text, out val))
e.Row.Cells[1].HorizontalAlign = HorizontalAlign.Right;
else
e.Row.Cells[1].HorizontalAlign = HorizontalAlign.Left;
}
}
您可以处理 gridViewReport_ItemCreated() 事件并将各种列的对齐方式设置为
e.Item.Cells[<zero-based-index-of-column>].Style["text-align"] = "right";
你可以gridViewReport_ondatabound事件来处理它。
protected void gridViewReport_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
decimal cellValue = 0.0m;
DataRow dr = ((DataRowView)e.Row.DataItem).Row;
if (dr[urs_cell_index] != null)
{
if (decimal.TryParse(dr[urs_cell_index].ToString(), out cellValue))
{
e.Row.Cells[urs_cell_index].HorizontalAlign = HorizontalAlign.Right;
}
else
{
e.Row.Cells[urs_cell_index].HorizontalAlign = HorizontalAlign.Left;
}
}
}
}