System.ArgumentOutOfRangeException: 'インデックスが範囲外です。負でなく、コレクションのサイズより小さくなければなりません。

2017-07-05 3 views
0
protected void getSUM() 
{ 
    // SQL query that gets total of product sales where category id = 1 
    string SqlQuery = @"SELECT Price AS TotalSales 
    FROM STOCK 
    WHERE Barcode = '" + TextBox1 + "'"; 

    // Declare and open a connection to database 


    sqlcon.Open(); 

    // Creates SqlCommand object 
    SqlCommand comm = new SqlCommand(SqlQuery, sqlcon); 

    // Gets total sales 
    decimal TotalSales = Convert.ToDecimal(comm.ExecuteScalar()); 

    // Close connection 
    sqlcon.Close(); 

    // Adds formatted output to GridView footer 
    GridView1.Columns[3].FooterText = String.Format("{0:c}", TotalSales); 
} 

ただ、gridviewのフッターに価格を追加したいだけです。私は何が間違っているのか分かりません。エラーはこの行にあります。GridView1.Columns [3] .FooterText = String.Format( "{0:c}"、TotalSales);System.ArgumentOutOfRangeException: 'インデックスが範囲外です。負でなく、コレクションのサイズより小さくなければなりません。

+0

4列ありますか?そうでない場合、4番目の列(索引3)にアクセスしようとすると、そのエラーが発生します。 – john

+0

'GridView1'には4列ありますか? '[]'インデックスアクセサはゼロベースです。だからそこに3を置くと、4列目にアクセスしようとしている – mituw16

+0

Gridviewにはいくつの列があるかチェックします。存在しないインデックスを使用して列を取得しようとすると、このエラーが表示されます。 – Sujith

答えて

0

おそらくAutoGenerateColumns="true"をGridViewで使用しています。これを使用すると、RowCreatedRowDataBoundイベントの列にのみアクセスできます。グリッドが完成すると、列数は0になります。

TemplateFieldsを使用する方が効果的です。あなたはそのように多くのコントロールを持っています。今

<asp:GridView ID="GridView1" runat="server"> 
    <Columns> 
     <asp:TemplateField> 
      <ItemTemplate> 
       <%# Eval("myColumn") %> 
      </ItemTemplate> 
     </asp:TemplateField> 
    </Columns> 
</asp:GridView> 

GridView1.Columns.Count1を返します。

関連する問題

 関連する問題