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