Как установить общее количество конкретного столбца в нижнем колонтитуле в gridview в C#?

Мне нужно установить общее количество столбцов в сетке.

Мой код:

<asp:TemplateField>
     <HeaderTemplate>
         Amount
     </HeaderTemplate>
     <ItemTemplate>
         <asp:Label ID="lblAmt" HeaderText="Amount" runat="server" 
              Text='<%# Eval("Amount")%>' Visible="true">
         </asp:Label>
     </ItemTemplate>
     <FooterTemplate>
         <asp:Label ID="lblTotalAmt" runat="server" />
     </FooterTemplate>
</asp:TemplateField>    

а потом:

decimal totProfit = 0M;
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
     if (e.Row.RowType == DataControlRowType.DataRow)
     {
          Label lblAmt = (Label)e.Row.FindControl("lblAmt");
          decimal Profitprice = Decimal.Parse(lblAmt.Text);
          totProfit += Profitprice;
     }
     if (e.Row.RowType == DataControlRowType.Footer)
     {
          Label lblTotalAmt = (Label)e.Row.FindControl("lblTotalAmt");
          lblTotalAmt.Text = totProfit.ToString();
     }
 }     

Но ошибка пришла как:

Входная строка была не в правильном формате.

2 ответа

Это может быть потому, что ваш lblAmt Может содержать значение, которое не является допустимым для десятичного числа. Поэтому убедитесь, что ваше значение должно быть в десятичном виде. Так что для более безопасного использования Decimal.TryParse как это

if (e.Row.RowType == DataControlRowType.DataRow)
{
  Label lblAmt = (Label)e.Row.FindControl("lblAmt");
  decimal Profitprice = 0;
  if(Decimal.TryParse(lblAmt.Text, out Profitprice));
  {
     totProfit += Profitprice;
  }
}

MS распознает ошибку во время целочисленных преобразований, которая может появиться здесь ( http://support.microsoft.com/kb/942460)

Другой вариант - убедиться, что это число в поле "Сумма".

decimal totProfit = 0M;
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        Label lblAmt = (Label)e.Row.FindControl("lblAmt");
        decimal Profitprice; 
        if (Decimal.TryParse(lblAmt.Text, Profitprice) ) {
             totProfit += Profitprice;
        }
    }
    if (e.Row.RowType == DataControlRowType.Footer)
    {
        Label lblTotalAmt = (Label)e.Row.FindControl("lblTotalAmt");
        lblTotalAmt.Text = totProfit.ToString();
    }
}     
Другие вопросы по тегам