I am new to C # and have a small problem with DataGridView. I have two codes selected in my database to fill this grid with different columns. I want the user to see only the columns I select, when I start, this works perfectly, but when I try to search the other columns, I get this message: "System.ArgumentOutOfRangeException: 'index was out of range. It must be non-negative and less than the size of the collection 'Arg_ParamName_Name' "
i've tryied to clear the index columns or restart the dataviewgrid, but no success! need help!
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;
}
EDIT: The entire code about this event.
Load Object:
private void IEstoque_Load(object sender, EventArgs e)
{
ResetDataGridView();
dgAlmoxarifado.DataSource = mt.CarregarGrid(1, txtSearch.Text);
ConfiguraDataGridView(1);
}
Pass to BLL:
public DataTable CarregarGrid(int opcao, string nomeBusca)
{
return cb.CarregarGrid(opcao, nomeBusca);
}
Pass to 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();
}
}
Then i have this button search:
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);
}
}
When i press that button occurs the error!