2016-08-19 179 views
-1

当我尝试更改列标题上的文本时,收到“索引超出范围”错误。请参阅下面的代码:[错误] [DataGridView]索引超出范围

private void cboMonth_TextChanged(object sender, EventArgs e) 
{ 
    dgvAnnual.DataSource = null; 
    dgvAnnual.Rows.Clear(); 
    dgvAnnual.Columns.Clear(); 

    BindingSource bSource = new BindingSource(); 
    bSource.DataSource = ReloadData(dtTable, cboMonth.Text); 
    dgvAnnual.DataSource = bSource; 

    //Testing Code 
    Console.WriteLine(dgvAnnual.Columns.Count); //Col = 4 
    Console.WriteLine(dgvAnnual.Rows.Count); //Row = 10 

    //The Code below is Working 
    string[] str = {"Col1","Col2","Col3","Col4"}; 
    For(int i = 0;i<dvgAnnual.Columns.Count;i++) 
    { 
     dvgAnnual.Columns[i].HeaderText = str[i]; //<----- It's ok if it's stay in Loop For, event if I replace i by "0" 
    } 

    //The Code below not working if it stay outside For 
    dgvAnnual.Columns[0].HeaderText = "Col1"; //<----- Error if stay alone like this 
} 
+0

For(int i = 0; i <= dvgAnnual.Columns.count; i ++)应该是'<'!当然是'计数'.. – TaW

+2

您的代码至少有2个错误,不会编译或使其崩溃。请发布[mcve]。 – nvoigt

+0

@Taw我的失败了,我的代码是正确的 –

回答

-1

列的值是4,但在循环中,你有它的范围它i = 0;我< = 4意味着总数是5.所以改变你的循环范围。使用我小于dvgAnnual.Columns.count而不是i小于等于dvgAnnual.Columns.count。去尝试一下。

for(int i = 0;i<dvgAnnual.Columns.count;i++) 
    { 
     dvgAnnual.Columns[i].HeaderText = str[i]; //<----- It's ok if it's stay in Loop For, event if I replace i by "0" 
    }  
+0

所以你的语法不正确对于for循环,它是小写 'for(int i = 0; i MethodMan

+0

@MethodMan哎呀!.. –

+0

我纠正了我的代码。这是我复制并粘贴时未能再次检查的失败。抱歉。问题是行dgvAnnual.Columns [0] .HeaderText =“Col Name Here”。 –

0

工作代码:

private void cboMonth_TextChanged(object sender, EventArgs e) 
    { 
     dgvAnnual.DataSource = null; 
     dgvAnnual.Rows.Clear(); 
     dgvAnnual.Columns.Clear(); 

     BindingSource bSource = new BindingSource(); 
     bSource.DataSource = ReloadData(dtTable, cboMonth.Text); 
     dgvAnnual.DataSource = bSource; 

     //Using for testing 
     Console.WriteLine(dgvAnnual.Columns.Count); //Col = 4 
     Console.WriteLine(dgvAnnual.Rows.Count); //Row = 10 

     //This Code below Working 
     string[] str = {"Col1","Col2","Col3","Col4"}; 
     For(int i = 0;i<dvgAnnual.Columns.Count;i++) 
     { 
      dvgAnnual.Columns[i].HeaderText = str[i]; //<----- It's ok if it's stay in Loop For, event if I replace i by "0" 
     } 
    } 

不工作:

private void cboMonth_TextChanged(object sender, EventArgs e) 
    { 
     dgvAnnual.DataSource = null; 
     dgvAnnual.Rows.Clear(); 
     dgvAnnual.Columns.Clear(); 

     BindingSource bSource = new BindingSource(); 
     bSource.DataSource = ReloadData(dtTable, cboMonth.Text); 
     dgvAnnual.DataSource = bSource; 

     //Testing Code 
     Console.WriteLine(dgvAnnual.Columns.Count); //Col = 4 
     Console.WriteLine(dgvAnnual.Rows.Count); //Row = 10 

     //This code below not working 
     dgvAnnual.Columns[0].HeaderText = "Col " + 1; //<----- Error: Index out of Range 
    } 

错误捕获的监视1

+ dgvAnnual.Columns[0] 'dgvAnnual.Columns[0]' threw an exception of type 'System.ArgumentOutOfRangeException' System.Windows.Forms.DataGridViewColumn {System.ArgumentOutOfRangeException} 

感谢