C# DataGridView索引超出范围
我是C新手,在DataGridView方面有一个小问题。我在数据库中选择了两个代码,用不同的列填充这个网格。我希望用户只看到我选择的列,当我开始时,这非常有效,但当我尝试搜索其他列时,我会收到以下消息:System.ArgumentOutOfRangeException:'索引超出范围。它必须为非负且小于集合“Arg\u ParamName\u Name”的大小 我试图清除索引列或重新启动dataviewgrid,但没有成功!需要帮助C# DataGridView索引超出范围,c#,mysql,C#,Mysql,我是C新手,在DataGridView方面有一个小问题。我在数据库中选择了两个代码,用不同的列填充这个网格。我希望用户只看到我选择的列,当我开始时,这非常有效,但当我尝试搜索其他列时,我会收到以下消息:System.ArgumentOutOfRangeException:'索引超出范围。它必须为非负且小于集合“Arg\u ParamName\u Name”的大小 我试图清除索引列或重新启动dataviewgrid,但没有成功!需要帮助 private void ConfiguraDataGr
private void ConfiguraDataGridView(int i)
{
switch (i)
{
case 1:
//setando nome do cabeçalho
dgAlmoxarifado.Columns[0].HeaderText = "Nome do Item";
dgAlmoxarifado.Columns[1].HeaderText = "Cor";
dgAlmoxarifado.Columns[2].HeaderText = "Marca";
dgAlmoxarifado.Columns[3].HeaderText = "Modelo";
dgAlmoxarifado.Columns[4].HeaderText = "Tamanho";
dgAlmoxarifado.Columns[5].HeaderText = "Quantidade";
dgAlmoxarifado.Columns[6].HeaderText = "Tipo";
dgAlmoxarifado.Columns[7].HeaderText = "Quantidade Recomendada";
dgAlmoxarifado.Columns[8].HeaderText = "Data de Cadastro";
dgAlmoxarifado.Columns[9].HeaderText = "Cadastro";
break;
case 2:
//setando nome do cabeçalho
dgAlmoxarifado.Columns[0].HeaderText = "Nome do Item";
dgAlmoxarifado.Columns[1].HeaderText = "Cor";
dgAlmoxarifado.Columns[2].HeaderText = "Marca";
dgAlmoxarifado.Columns[3].HeaderText = "Modelo";
dgAlmoxarifado.Columns[4].HeaderText = "Tamanho";
dgAlmoxarifado.Columns[5].HeaderText = "Quantidade";
dgAlmoxarifado.Columns[6].HeaderText = "Tipo";
dgAlmoxarifado.Columns[7].HeaderText = "Requisição";
dgAlmoxarifado.Columns[8].HeaderText = "Data de Requisição";
dgAlmoxarifado.Columns[9].HeaderText = "Quantidade Requisitada";
dgAlmoxarifado.Columns[10].HeaderText = "Reposição";
dgAlmoxarifado.Columns[11].HeaderText = "Data de Reposição";
dgAlmoxarifado.Columns[12].HeaderText = "Quantidade Repositada";
dgAlmoxarifado.Columns[13].HeaderText = "Observação";
break;
}
}
private void ResetDataGridView()
{
// dgAlmoxarifado.CancelEdit();
// dgAlmoxarifado.Dispose();
dgAlmoxarifado.Columns.Clear();
dgAlmoxarifado.Refresh();
dgAlmoxarifado.DataSource = null;
}
编辑:有关此事件的完整代码
加载对象:
private void IEstoque_Load(object sender, EventArgs e)
{
ResetDataGridView();
dgAlmoxarifado.DataSource = mt.CarregarGrid(1, txtSearch.Text);
ConfiguraDataGridView(1);
}
通过BLL:
public DataTable CarregarGrid(int opcao, string nomeBusca)
{
return cb.CarregarGrid(opcao, nomeBusca);
}
通过DAL:
public DataTable CarregarGrid(int opcao, string nomeBusca)
{
DataTable dt = new DataTable();
string comando = string.Empty;
switch (opcao)
{
case 1:
comando = "select i.nomeItem, i.cor, i.marca, i.modelo, i.tamanho, i.quantidadeDisponivel,i.tipo, i.quantidadeRecomendada, i.cadastradoNoDia, u.nomeUsuario from itens i join movimentacao m on i.id = m.id_itens join usuarios u on u.id = m.id_usuario where i.nomeItem like @nome ";
break;
case 2:
comando = "select i.nomeItem, i.cor, i.marca, i.modelo, i.tamanho, i.quantidadeDisponivel,i.tipo, m.requisicao, m.dataRequisicao, m.quantidadeRequisitada, m.observacaoRequisicao,m.reposicao, m.dataReposicao, m.quantidadeReposicao, m.observacaoReposicao from itens i join movimentacao m on i.id = m.id_itens join usuarios u on u.id = m.id_usuario where i.nomeItem like @nome ";
break;
}
MySqlCommand cmd = new MySqlCommand(comando, connection);
cmd.Parameters.AddWithValue("@nome", "%"+ nomeBusca +"%");
try
{
Conectar();
MySqlDataAdapter da = new MySqlDataAdapter(cmd);
da.Fill(dt);
return dt;
}
catch (MySqlException ex)
{
string erro = ex.Message;
return dt;
}
finally
{
Desconectar();
}
}
然后我有这个按钮搜索:
private void btnSearch_Click(object sender, EventArgs e)
{
if (rdItem.Checked == true)
{
ResetDataGridView();
dgAlmoxarifado.DataSource = mt.CarregarGrid(1, txtSearch.Text);
ConfiguraDataGridView(1);
}
else if (rdMovimentacao.Checked == true)
{
ResetDataGridView();
dgAlmoxarifado.DataSource = mt.CarregarGrid(2, txtSearch.Text);
ConfiguraDataGridView(2);
}
}
当我按下那个按钮时,出现了错误 成功了,多亏了大家的帮助,我的选择出现了问题
字段名中的一个错误,在遵循@Jannick Breunis关于只清理数据源的提示和@Nbk关于直接检查数据表填充的提示后,已解决。不清除列,只需将数据源设置为null,然后将其设置为相应的数据源。您确定您的headertextsHi拥有正确的数据源吗!欢迎来到堆栈溢出!看一看,它应该能够非常有效地回答您的问题!请务必同时查看,以便您可以调整我们回答问题的方式。如果e.RowIndex!=-1&e.ColumnIndex!=-1{nbk是的,我确定。问题是,当我搜索代码时,它会填充从0到9的索引,然后如果我搜索其他代码,我的索引不会从0开始,它会从9开始,然后它会爆发。我将发布有关此事件的整个代码