/// <summary>
        ///     Carrega os campos do objeto alvo
        /// </summary>
        /// <param name="nomeObjeto">nome do objeto</param>
        /// <param name="tipo">tipo do objeto (tabela,view,procedure)</param>
        private void CarregaCamposObjeto(string nomeObjeto, EDatabaseObjectType tipo)
        {
            try
            {
                if (ObjetosSelecionado == null)
                {
                    var colunasObjeto = new List<ColumnInfo>();

                    switch (tipo)
                    {
                        case EDatabaseObjectType.Tabela:
                            colunasObjeto = Gerador.TableMapping.ListAllFieldsFromTable(BancoSelecionado, nomeObjeto,
                                DadosLogin);
                            break;

                        case EDatabaseObjectType.View:
                            colunasObjeto = Gerador.ViewMapping.ListAllFieldsFromViews(BancoSelecionado, nomeObjeto,
                                DadosLogin);
                            break;

                        case EDatabaseObjectType.Procedure:
                            Parametros =
                                Gerador.StoredProcedureMapping.ListAllStoredProceduresParameters(BancoSelecionado,
                                    DadosLogin, nomeObjeto);

                            if (Parametros.Count > 0)
                            {
                                var frm = new frmParametros {Parametros = Parametros};

                                if (frm.ShowDialog(this) == DialogResult.Yes)
                                {
                                    Parametros = frm.Parametros;
                                }
                                frm.Dispose();
                            }

                            if (
                                MessageBox.Show(
                                    string.Format(
                                        "Algumas procedures podem desencadear uma sequencia de insert's, update's e delete's.\nExecute apenas procedures que você conheça o funcionamento e que retornem dados.\nDeseja executar a procedure '{0}' ?",
                                        nomeObjeto), "ATENÇÃO", MessageBoxButtons.YesNo, MessageBoxIcon.Warning,
                                    MessageBoxDefaultButton.Button2) == DialogResult.Yes)
                            {
                                colunasObjeto =
                                    Gerador.StoredProcedureMapping.ListAllFieldsFromStoredProcedure(BancoSelecionado,
                                        nomeObjeto, Parametros, DadosLogin);
                            }

                            break;

                        case EDatabaseObjectType.Query:
                            colunasObjeto = Colunas;
                            break;

                        default:
                            throw new ArgumentOutOfRangeException("tipo", "Tipo inválido");
                    }

                    ObjetosSelecionado = tipo == EDatabaseObjectType.Query
                        ? new DatabaseObjectInfo(nomeObjeto, tipo, Parametros, Consulta) {Columns = colunasObjeto}
                        : new DatabaseObjectInfo(nomeObjeto, tipo, Parametros) {Columns = colunasObjeto};
                }

                GridView.CarregaGridViewColunas(gvColunasObjeto, ObjetosSelecionado, IlObjetos);
            }
            catch (Exception ex)
            {
                MessageBox.Show(string.Format("Erro:\n{0}", ex.Message), ex.Source, MessageBoxButtons.OK,
                    MessageBoxIcon.Error);
            }
        }
        private void lvObjetosBanco_ItemCheck(object sender, ItemCheckEventArgs e)
        {
            if (lvObjetosBanco.Items[e.Index].Group == lvObjetosBanco.Groups["procedure"] && e.NewValue == CheckState.Checked)
            {
                var nomesTiposObjeto = new DatabaseObjectInfo(lvObjetosBanco.Items[e.Index].Text, lvObjetosBanco.Items[e.Index].SubItems[4].Text.ConvertToEnum<EDatabaseObjectType>(), new List<StoredProcedureParameter>());

                Parameters = Gerador.StoredProcedureMapping.ListAllStoredProceduresParameters(BancoSelecionado, User, lvObjetosBanco.Items[e.Index].Text);

                if (Parameters.Count > 0)
                {
                    var frm = new frmParametros { Parametros = Parameters };

                    if (frm.ShowDialog(this) == DialogResult.Yes)
                    {
                        nomesTiposObjeto.AjustaParametros(frm.Parametros);
                    }
                    else
                    {
                        MessageBox.Show("Não é possivel carregar os dadso da StoredProcedure sem o preenchimento dos parametros", "", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        e.NewValue = CheckState.Unchecked;
                        return;
                    }
                    frm.Dispose();
                }
                _imgObjetosMapeados.Add(new KeyValuePair<string, Image>(lvObjetosBanco.Items[e.Index].Text, ilIcones.Images["cheked"]));

                nomesTiposObjeto.Columns = CarregaCamposObjeto(nomesTiposObjeto.Name, nomesTiposObjeto.DatabaseObjectType, true);
                _selectedObjects.Add(nomesTiposObjeto);
            }

            if (e.NewValue == CheckState.Unchecked)
            {
                _selectedObjects = _selectedObjects.Where(o => o.Name != lvObjetosBanco.Items[e.Index].Text).ToList();
                _imgObjetosMapeados = _imgObjetosMapeados.Where(o => o.Key != lvObjetosBanco.Items[e.Index].Text).ToList();
            }
        }