[英][Error][DataGridView] Index out of Range
I receive an "Index out of Range" error when I try to change text on Columns Header.当我尝试更改列标题上的文本时,收到“索引超出范围”错误。 See code below:
见下面的代码:
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
}
Working Code :工作代码:
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"
}
}
Not Working:不工作:
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
}
Error catch on Watch1 Watch1 上的错误捕获
+ dgvAnnual.Columns[0] 'dgvAnnual.Columns[0]' threw an exception of type 'System.ArgumentOutOfRangeException' System.Windows.Forms.DataGridViewColumn {System.ArgumentOutOfRangeException}
Thanks谢谢
The value of the Columns is 4 here but in the loop you have ranged it i = 0; Columns 的值在此处为 4,但在循环中您已将其设置为 i = 0; to i<=4 means total number is 5. so change your range of for loop.
to i<=4 表示总数为 5。因此更改 for 循环的范围。 use i is less then dvgAnnual.Columns.count instead of i is less than and equal to dvgAnnual.Columns.count.
使用 i 小于 dvgAnnual.Columns.count 而不是 i 小于等于 dvgAnnual.Columns.count。 Just try it.
试试吧。
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"
}
Solution: the datagridview must be linked to a form解决方法:datagridview 必须链接到一个表单
Example: dgv_Example.Parent = frm_Example示例:dgv_Example.Parent = frm_Example
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.