我在名为“总计”的列中有负数的网格视图,我喜欢将所有负数放在括号中。
例如
Total
76
(-66)
646
(-76)
(-10)
(-6)
16
676
我正在使用带有 C# 的 ASP.NET,我应该如何去做。
或者我可以在 SQL 查询中做吗?因为网格视图是通过 sql 数据源填充的。
我在名为“总计”的列中有负数的网格视图,我喜欢将所有负数放在括号中。
Total
76
(-66)
646
(-76)
(-10)
(-6)
16
676
我正在使用带有 C# 的 ASP.NET,我应该如何去做。
或者我可以在 SQL 查询中做吗?因为网格视图是通过 sql 数据源填充的。
看看这个简单的例子。我正在使用 Gridview:
C#
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
List<int> x = new List<int>() { 76, -66, 646, -76, -10, -6, 16, 676 };
this.GridView1.DataSource = x;
this.GridView1.DataBind();
}
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
if (Convert.ToInt32(e.Row.Cells[0].Text) < 0)
{
e.Row.Cells[0].Text = "(" + e.Row.Cells[0].Text + ")";
}
}
}
}
输出:
Item
76
(-66)
646
(-76)
(-10)
(-6)
16
676
祝你好运
编辑:我不会修改 SQL 的输出以使其仅用于此目的。
我会做一些类似于 Hanlet Escano 的事情,但不是解析,我会像这样处理数据对象:
默认.aspx
<asp:GridView ID="gvGrid" runat="server" AutoGenerateColumns="false" OnRowDataBound="gvGrid_RowDataBound">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:Literal ID="litData" runat="server" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
默认.aspx.cs
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { //生成数据 var data = new List() { 76, -66, 646, -76, -10, -6, 16, 676 };
gvGrid.DataSource = data;
gvGrid.DataBind();
}
}
protected void gvGrid_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
//Strongly Type Controls
var litData = (Literal)e.Row.FindControl("litData");
//Strongly Type Data
var data = (int)e.Row.DataItem;
//Display Data
if (data < 0)
{
litData.Text = "[" + data.ToString() + "]";
}
else
{
litData.Text = data.ToString();
}
}
}
这样做有几个优点,数据已经以其本机形式 (int) 存储,它只是在对象变量中。
其次,如果将来您需要处理具有更复杂数据对象(Person/Business/Foo/Bar 对象)的多个列,则可以使用相同的技术。
使用gridview的onRowDataBound事件并根据需要更新单元格,添加括号和东西:)
一探究竟: