我在加载时使用SQL Server存储过程作为gridview的源代码。该查询具有结果为数字(money)的列,我希望数字输出在gridview中加载时具有逗号。最初在SQL中,查询结果没有任何格式,因为我试图将格式放在前端。
之前,我可以通过在gridview定义中放置一个boundfield,然后输入属性名称datafield,根据SQL中的列名或别名给出其值来实现。但是在我的情况下,这次存储过程列具有动态别名,因为它产生了一个具有特定日期的列(它根据一周中的几天而变化)。
存储过程就像这样(最后一部分)
set @query = 'select locationd, Name ' +
',(SUM(Day1)) as '+ '[' + @sdateVC1 + ']' +
',(SUM(Day2)) as '+ '[' + @sdateVC2 + ']' +
',(SUM(Day3)) as '+ '[' + @sdateVC3 + ']' +
',(SUM(Day4)) as '+ '[' + @sdateVC4 + ']' +
',(SUM(Day5)) as '+ '[' + @sdateVC5 + ']' +
',(SUM(Day6)) as '+ '[' + @sdateVC6 + ']' +
',(SUM(Day7)) as '+ '[' + @sdateVC7 + ']' +
',(SUM(ISNULL(Day1,0)) + SUM(ISNULL(Day2,0)) + SUM(ISNULL(Day3,0)) + SUM(ISNULL(Day4,0)) + SUM(ISNULL(Day5,0)) + SUM(ISNULL(Day6,0)) + SUM(ISNULL(Day7,0)))as ''TOTAL'' ' +
',RANK() over (partition by locationd order by ((SUM(ISNULL(Day1,0)) + SUM(ISNULL(Day2,0)) + SUM(ISNULL(Day3,0)) + SUM(ISNULL(Day4,0)) + SUM(ISNULL(Day5,0)) + SUM(ISNULL(Day6,0)) + SUM(ISNULL(Day7,0)))) DESC) as ''Ranking'' ' +
'from #newestWSR4 ' +
'group by locationd, Name ' +
--'order by locationd, Name '
'union all' +
' select ''-'', ''TOTAL'', sum(day1), sum(day2), sum(day3), sum(day4), sum(day5), sum(day6), sum(day7), (SUM(ISNULL(Day1,0)) + SUM(ISNULL(Day2,0)) + SUM(ISNULL(Day3,0)) + SUM(ISNULL(Day4,0)) + SUM(ISNULL(Day5,0)) + SUM(ISNULL(Day6,0)) + SUM(ISNULL(Day7,0))), ''-'' ' +
'from #newestWSR4 '
ASP.net中的gridview代码就像这样
<asp:GridView ID="grdWSR" runat="server" BackColor="White" BorderColor="#DEDFDE"
BorderStyle="None" BorderWidth="1px" CellPadding="4" ForeColor="Black"
GridLines="Vertical" Font-Size="Smaller" EmptyDataText="No Records Found"
ShowHeaderWhenEmpty="True" width="100%" AutoGenerateColumns="false" >
<emptydatarowstyle backcolor="white" forecolor="black"/>
<emptydatatemplate> No Data Found.</emptydatatemplate>
<AlternatingRowStyle BackColor="White" />
<Columns>
<asp:BoundField DataField="locationd" />
<asp:BoundField DataField="name" />
<asp:BoundField Datafield="" DataFormatString="{0:#,##0.00;(#,##0.00);0}" />
</Columns>
<FooterStyle BackColor="#CCCC99" />
<HeaderStyle BackColor="#6B696B" Font-Bold="True" ForeColor="White" Height="25px"/>
<PagerStyle BackColor="#F7F7DE" ForeColor="Black" HorizontalAlign="Right" />
<RowStyle BackColor="#F7F7DE" />
<SelectedRowStyle BackColor="#CE5D5A" Font-Bold="True" ForeColor="White" />
<SortedAscendingCellStyle BackColor="#FBFBF2" />
<SortedAscendingHeaderStyle BackColor="#848384" />
<SortedDescendingCellStyle BackColor="#EAEAD3" />
<SortedDescendingHeaderStyle BackColor="#575357" />
</asp:GridView>
请注意上面代码中的这一部分
<asp:BoundField DataField="locationd" />
<asp:BoundField DataField="name" />
<asp:BoundField Datafield="" DataFormatString="{0:#,##0.00;(#,##0.00);0}" />
正如您所看到的,我只将三个边界区域用于测试目的。在那里我不知道在数据域值中放入什么,因为SQL存储过程中的别名列是动态更改或不是固定的,与前两个边界字段(SQL中的列名/别名是固定的)不同
这种情况可以回答吗?或者我应该考虑现在在后端(SQL)上做解决方案来实现我想要的结果吗?
任何帮助将不胜感激!
答案 0 :(得分:1)
我建议你不要在sp中做任何格式化的事情, 它将使您的系统在优化方面超载,
更喜欢c#而不是
DataTable dt=mySP();
for(i=0;i<dt.Rows.Count;i++)
{
dt.Rows[i][10]=Convert.ToDouble(dt.Rows[i][10]).ToString("#,###,###,###,###,##0.00");
}
GridView1.DatSource=dt;
答案 1 :(得分:0)
尝试在存储过程中格式化这样的字符串:
CONVERT(varchar, CAST(SUM(Day1) AS money), 1)
或者像这样 -
FORMAT(SUM(Day1),'###,###,###')