C# [错误][DataGridView]索引超出范围

C# [错误][DataGridView]索引超出范围,c#,datagridview,C#,Datagridview,当我尝试更改列标题上的文本时,收到“索引超出范围”错误。见下面的代码: private void cboMonth_TextChanged(object sender, EventArgs e) { dgvAnnual.DataSource = null; dgvAnnual.Rows.Clear(); dgvAnnual.Columns.Clear(); BindingSource bSource = new BindingSource(); bSou

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

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
}
private void cboMonth\u text已更改(对象发送方,事件参数e)
{
dgvAnnual.DataSource=null;
dgvAnnual.Rows.Clear();
dgvAnnual.Columns.Clear();
BindingSource bSource=新的BindingSource();
bSource.DataSource=重新加载数据(dtTable,cboMonth.Text);
dgvAnnual.DataSource=b源;
//测试代码
Console.WriteLine(dgvAnnual.Columns.Count);//Col=4
Console.WriteLine(dgvAnnual.Rows.Count);//行=10
//下面的代码正在运行
字符串[]str={“Col1”、“Col2”、“Col3”、“Col4”};

对于(int i=0;i而言,此处列的值为4,但在循环中,您将其范围设定为i=0;到i工作代码:

    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"
       }
    }

谢谢解决方案:datagridview必须链接到表单

例如:
dgv_Example.Parent=frm_Example

用于(int i=0;i您的代码至少有2个错误无法编译或使其崩溃。请发布一条。@Taw My failed,我在我的代码
For
中更正了它。循环是区分大小写的,因为它的
For
也会调试您的代码,并从逻辑角度考虑它为什么在循环内部工作而不是在循环外部工作。此外,列索引也是
0
based not
1
based也
dgvAnnual.Columns[0]。HeaderText=“Col”+1;
也会出错。无法为文本值指定整数。请将代码更改为该值以测试
dgvAnnual.Columns[0]。HeaderText=“Col”+1.ToString()
好吧。您仍然没有正确的拼写,但主要问题可能是您有超过4列。因此,您的语法对于for循环是不正确的,它的小写字母
for(int i=0;iI更正了我的代码。这是我在复制和粘贴时没有再次检查它时失败的。抱歉。问题是行dgvAnnual.columns[0].HeaderText=“Col Name Here”。我很快就指出了这一点,因为我注意到有人否决了你的意见,标题文本也应该是一个字符串,然后在循环内部将列名递增为
“Col”+I.ToString()
这可以在str变量
string str=“Col”的声明中这样处理
我在第一次运行时遇到一个错误(I=0)。我有另一种方法来修复它,但我想请您清楚地理解它。tks
    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
    }
    +   dgvAnnual.Columns[0]    'dgvAnnual.Columns[0]' threw an exception of type 'System.ArgumentOutOfRangeException'  System.Windows.Forms.DataGridViewColumn {System.ArgumentOutOfRangeException}