2017-01-06 3 views
2

ボタンをクリックした後に実行する2つの方法、bgEqptRec()およびreceiveHeader()があります。 bgEqptRec()には、列ヘッダのタイトルを設定したrecieveHeader()が含まれています。しかし、インデックスが範囲外だったために設定できません。 SQL Serverから適切なインデックス番号を使用していることは間違いありません。ここでは、コードです:インデックスが範囲外であるために列ヘッダーテキストを設定できません

private void btnSearch_Click(object sender, EventArgs e) 
{ 
     bgEqptRec(); 
} 

private void bgEqptRec() 
     { 
      receiveHeader(); 
      gvSearch.DataSource = null; 
      using (var connect = connection.getConnection()) 
      { 
       using (SqlCommand cmd = new SqlCommand("SELECT * FROM receive WHERE rec_stat='IN' AND rec_date BETWEEN '" + dtpFrom.Text + "' AND '" + dtpTo.Text + "'")) 
       { 
        cmd.Connection = connect; 
        cmd.CommandType = CommandType.Text; 
        using (SqlDataAdapter da = new SqlDataAdapter(cmd)) 
        { 
         using (DataTable dt = new DataTable()) 
         { 
          da.Fill(dt); 
          gvSearch.DataSource = dt; 
         } 
        } 
       } 
      } 
     } 

private void receiveHeader() 
     { 
      gvSearch.Columns[0].HeaderText = "Supplier"; 
      gvSearch.Columns[1].HeaderText = "Invoice"; 
      gvSearch.Columns[2].HeaderText = "Brand"; 
      gvSearch.Columns[3].HeaderText = "Model"; 
      gvSearch.Columns[4].HeaderText = "Equipment"; 
      gvSearch.Columns[5].HeaderText = "Serial No."; 
      gvSearch.Columns[6].HeaderText = "Price"; 
      gvSearch.Columns[7].HeaderText = "PO No."; 
      gvSearch.Columns[8].HeaderText = "Release Date"; 
      gvSearch.Columns[9].HeaderText = "Release By"; 
      gvSearch.Columns[10].HeaderText = "Status"; 
     } 

VSによって与えられたエラーは、「インデックスが範囲外でした負でないコレクションのサイズよりも小さくなければなりません。」でした。

+0

この行でエラーを取得している: 'gvSearch.Columns [0]' –

+0

は列が利用可能であるか確認するために、簡単なテストを実行します - いずれかのデバッグと時計にgvSearch.Columns、またはループして、各columnnインデックスとフィールド名を印刷するだけです... – Rex

答えて

1

receiveHeader();メソッドを呼び出す時に、Columns[10]を取っているように、グリッドのdataSourceがnullであるか、またはそれより少ない数の列であることを願います。だから私はあなたのグリッドのデータソースを割り当てた後にメソッドを呼び出すことをお勧めします。クエリが少なくとも11の列を返すことを確認します。これは、コードは次のようになります意味:

using (var connect = connection.getConnection()) 
{ 
    using (SqlCommand cmd = new SqlCommand("SELECT * FROM receive WHERE rec_stat='IN' AND rec_date BETWEEN '" + dtpFrom.Text + "' AND '" + dtpTo.Text + "'")) 
    { 
     // rest of code 
     gvSearch.DataSource = dt; 
    } 
} 
// call the method here since the grid is populated 

receiveHeader(); 
関連する問題