“输入字符串的格式不正确。”

时间:2015-11-25 11:04:43

标签: c# sql-server-2008 gridview

我想计算gridview数据的运行总数,我有以下代码:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    DataRowView dtview = e.Row.DataItem as DataRowView;

    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        Label lblaprl = (Label)e.Row.FindControl("lblaprl");
        Totalapr = Totalapr + Convert.ToDecimal(lblaprl.Text);
        Label lblmay = (Label)e.Row.FindControl("lblmay");
        Totalmay = Totalmay + Convert.ToDecimal(lblmay.Text);
    }

    if (e.Row.RowType == DataControlRowType.Footer)
    {
            Label lbl_aprTotalamount = (Label)e.Row.FindControl("lbl_aprTotalamount");
            lbl_aprTotalamount.Text = Totalapr.ToString();
            Label lbl_mayTotalamount = (Label)e.Row.FindControl("lbl_mayTotalamount");
            lbl_mayTotalamount.Text = Totalmay.ToString();
    }
}

当我们为一个月的一个列运行此代码时它工作正常,但是当我们想要分别计算两个列的运行总数时,它会导致此错误:

  

输入字符串的格式不正确。

在我的代码中的以下行

Label lblmay = (Label)e.Row.FindControl("lblmay");
***Totalmay = Totalmay + Convert.ToDecimal(lblmay.Text);***

我的用于绑定gridview的c#代码

public void bindgvduedate()
{
    con = new SqlConnection();
    con.ConnectionString = ConfigurationManager.ConnectionStrings["con1"].ConnectionString;
    con.Open();

    SqlCommand cmd = new SqlCommand();
    cmd.CommandText = "readfeedetails";
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Connection = con;
    ////cmd.Parameters.AddWithValue("@classname",Convert.ToString(ddlclassname.SelectedItem));
    ////cmd.Parameters.AddWithValue("@feecatename", Convert.ToString(ddlstcategory.SelectedItem));

    SqlDataAdapter da = new SqlDataAdapter(cmd);
    DataTable table = new DataTable();
    da.Fill(table );
    GridView1.DataSource= table;
    GridView1.DataBind();
    con.Close();
}

我在页面加载事件上调用此函数。

Gridview aspx标记:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
     BackColor="White" BorderColor="#336666" BorderStyle="Double" 
     Font-Size="11px" BorderWidth="3px" 
     CellPadding="4" GridLines="both" 
     ShowFooter="True" onrowdatabound="GridView1_RowDataBound">
     <RowStyle ForeColor="#333333" BackColor="White" Height="21px" />
     <Columns>
         <asp:TemplateField>
             <HeaderTemplate>Apr-15 </HeaderTemplate>
             <ItemTemplate><asp:Label ID="lblaprl" runat="server" Text='<%#Eval("Apr-15") %>'></asp:Label></ItemTemplate>
             <FooterTemplate> <asp:Label ID="lbl_aprTotalamount" CssClass="footer_text" runat="server" Text="1"></asp:Label> </FooterTemplate>
         </asp:TemplateField>
         <asp:TemplateField>
            <HeaderTemplate>May-15 </HeaderTemplate>
            <ItemTemplate><asp:Label ID="lblmay" runat="server" Text='<%#Eval("May-15")%>'></asp:Label></ItemTemplate>
            <FooterTemplate><asp:Label ID="lbl_mayTotalamount" CssClass="footer_text" runat="server" Text="1"></asp:Label></FooterTemplate>
         </asp:TemplateField>
         <asp:TemplateField>
            <HeaderTemplate>Jun-15 </HeaderTemplate>
            <ItemTemplate><asp:Label ID="lbljun" runat="server" Text='<%#Eval("Jun-15") %>'></asp:Label></ItemTemplate>
            <FooterTemplate> <asp:Label ID="lbl_junTotalamount" CssClass="footer_text" runat="server" Text="1"></asp:Label> </FooterTemplate>
         </asp:TemplateField>
         <asp:TemplateField>
            <HeaderTemplate>Jul-15 </HeaderTemplate>
            <ItemTemplate><asp:Label ID="lbljul" runat="server" Text='<%#Eval("Jul-15") %>'></asp:Label></ItemTemplate>
            <FooterTemplate> <asp:Label ID="lbl_julTotalamount" CssClass="footer_text" runat="server" Text="1"></asp:Label> </FooterTemplate>
         </asp:TemplateField>
         <asp:TemplateField>
            <HeaderTemplate>Aug-15 </HeaderTemplate>
            <ItemTemplate><asp:Label ID="lblaug" runat="server" Text='<%#Eval("Aug-15") %>'></asp:Label></ItemTemplate>
            <FooterTemplate> <asp:Label ID="lbl_augTotalamount" CssClass="footer_text" runat="server" Text="1"></asp:Label> </FooterTemplate>
         </asp:TemplateField>
         <asp:TemplateField>
            <HeaderTemplate>Sep-15 </HeaderTemplate>
            <ItemTemplate><asp:Label ID="lblsep" runat="server" Text='<%#Eval("Sep-15") %>'></asp:Label></ItemTemplate>
            <FooterTemplate> <asp:Label ID="lbl_sepTotalamount" CssClass="footer_text" runat="server" Text="1"></asp:Label> </FooterTemplate>
         </asp:TemplateField>
         <asp:TemplateField>
            <HeaderTemplate>Oct-15 </HeaderTemplate>
            <ItemTemplate><asp:Label ID="lbloct" runat="server" Text='<%#Eval("Oct-15") %>'></asp:Label></ItemTemplate>
            <FooterTemplate> <asp:Label ID="lbl_octTotalamount" CssClass="footer_text" runat="server" Text="1"></asp:Label> </FooterTemplate>
         </asp:TemplateField>
         <asp:TemplateField>
            <HeaderTemplate>Nov-15 </HeaderTemplate>
            <ItemTemplate><asp:Label ID="lblnov" runat="server" Text='<%#Eval("Nov-15") %>'></asp:Label></ItemTemplate>
            <FooterTemplate> <asp:Label ID="lbl_novTotalamount" CssClass="footer_text" runat="server" Text="1"></asp:Label> </FooterTemplate>
         </asp:TemplateField>
         <asp:TemplateField>
            <HeaderTemplate>Dec-15 </HeaderTemplate>
            <ItemTemplate><asp:Label ID="lbldec" runat="server" Text='<%#Eval("Dec-15") %>'></asp:Label></ItemTemplate>
            <FooterTemplate> <asp:Label ID="lbl_decTotalamount" CssClass="footer_text" runat="server" Text="1"></asp:Label> </FooterTemplate>
         </asp:TemplateField>
         <asp:TemplateField>
            <HeaderTemplate>Jan-15 </HeaderTemplate>
            <ItemTemplate><asp:Label ID="lbljan" runat="server" Text='<%#Eval("Jan-15") %>'></asp:Label></ItemTemplate>
            <FooterTemplate> <asp:Label ID="lbl_janTotalamount" CssClass="footer_text" runat="server" Text="1"></asp:Label> </FooterTemplate>
         </asp:TemplateField>
         <asp:TemplateField>
            <HeaderTemplate>Feb-15 </HeaderTemplate>
            <ItemTemplate><asp:Label ID="lblfeb" runat="server" Text='<%#Eval("Feb-15") %>'></asp:Label></ItemTemplate>
            <FooterTemplate> <asp:Label ID="lbl_febTotalamount" CssClass="footer_text" runat="server" Text="1"></asp:Label> </FooterTemplate>
         </asp:TemplateField>
         <asp:TemplateField>
            <HeaderTemplate>Mar-15 </HeaderTemplate>
            <ItemTemplate><asp:Label ID="lblmar" runat="server" Text='<%#Eval("Mar-15") %>'></asp:Label></ItemTemplate>
            <FooterTemplate> <asp:Label ID="lbl_marTotalamount" CssClass="footer_text" runat="server" Text="1"></asp:Label> </FooterTemplate>
         </asp:TemplateField>
         <asp:TemplateField>
            <HeaderTemplate>Total </HeaderTemplate>
            <ItemTemplate><asp:Label ID="lbltotal" runat="server" Text="0"></asp:Label></ItemTemplate>
            <FooterTemplate> <asp:Label ID="lbl_Totalsamount" CssClass="footer_text" runat="server" Text="1"></asp:Label> </FooterTemplate>
         </asp:TemplateField>
     </Columns>
     <FooterStyle BackColor="White" ForeColor="#333333" />
     <PagerStyle BackColor="#336666" ForeColor="White" HorizontalAlign="Center" />
     <SelectedRowStyle BackColor="#339966" Font-Bold="True" ForeColor="White" />
     <HeaderStyle BackColor="#336666" Font-Bold="True" ForeColor="White" />
</asp:GridView>

我的数据库表

CREATE TABLE [dbo].[feemaster]
(
   [feeId] [int] IDENTITY(1,1) NOT NULL,
   [feetype] [nvarchar](50) NULL,
   [feename] [nvarchar](50) NULL,
   [classname] [nvarchar](50) NULL,
   [duemonth] [nvarchar](50) NULL,
   [feeamount] [decimal](15, 2) NULL,
   [feeactive] [bit] NULL,
   [feecatename] [nvarchar](50) NULL
) ON [PRIMARY]
GO

SET IDENTITY_INSERT [dbo].[feemaster] ON

INSERT [dbo].[feemaster] ([feeId], [feetype], [feename], [classname], [duemonth], [feeamount], [feeactive], [feecatename]) 
VALUES (1, N'One Time', N'Prospectus & Registration Fee', N'PRE NURSURY', N'Apr-15', CAST(300.00 AS Decimal(15, 2)), 1, N'NEW')

INSERT [dbo].[feemaster] ([feeId], [feetype], [feename], [classname], [duemonth], [feeamount], [feeactive], [feecatename]) 
VALUES (13, N'One Time', N'Prospectus & Registration Fee', N'NURSURY', N'Apr-15', CAST(300.00 AS Decimal(15, 2)), 1, N'NEW')

INSERT [dbo].[feemaster] ([feeId], [feetype], [feename], [classname], [duemonth], [feeamount], [feeactive], [feecatename]) 
VALUES (2, N'One Time', N'Prospectus & Registration Fee', N'KG', N'Apr-15', CAST(300.00 AS Decimal(15, 2)), 1, N'NEW')

INSERT [dbo].[feemaster] ([feeId], [feetype], [feename], [classname], [duemonth], [feeamount], [feeactive], [feecatename]) 
VALUES (16, N'Annual', N'Maintenance Fee', N'NURSURY', N'Apr-15', CAST(500.00 AS Decimal(15, 2)), 1, N'NEW')

INSERT [dbo].[feemaster] ([feeId], [feetype], [feename], [classname], [duemonth], [feeamount], [feeactive], [feecatename]) 
VALUES (17, N'Annual', N'Maintenance Fee', N'NURSURY', N'Apr-15', CAST(500.00 AS Decimal(15, 2)), 1, N'OLD')

INSERT [dbo].[feemaster] ([feeId], [feetype], [feename], [classname], [duemonth], [feeamount], [feeactive], [feecatename]) 
VALUES (18, N'Annual', N'Maintenance Fee', N'KG', N'Apr-15', CAST(500.00 AS Decimal(15, 2)), 1, N'NEW')

我的存储过程

create proc [dbo].[readfeedetails]
AS
BEGIN
    select
        *
    from
        (select 
             f.feename, f.feeamount, dd.duemonth 
         from 
             feemaster as f
         left outer join 
             duedate as dd on dd.duemonth = f.duemonth  
         where   
             classname = 'KG' and feeactive = 1 
             and feecatename = 'OLD') as f
pivot
(
  min(f.feeamount)
  for f.duemonth in ([Apr-15],[May-15],[Jun-15],[Jul-15],[Aug-15],[Sep-  15],[Oct-15],[Nov-15],[Dec-15],[Jan-15],[Feb-15],[Mar-15])
) as PIV
END
GO

请有人建议我们如何删除此错误吗?

1 个答案:

答案 0 :(得分:1)

我想在某些行中,lblmay是空的。尝试检查这种情况,如下所示:

    Label lblmay = (Label)e.Row.FindControl("lblmay");
    if (lblmay.Text.Trim()!="")
    {
       Totalmay = Totalmay + Convert.ToDecimal(lblmay.Text);
    }`