private void CB_project_MouseClick(object sender, MouseEventArgs e)
        {
            if (CB_project.Items.Count > 0)
            {
                return;
            }

            Expert  dbExpert  = new Expert(null);
            Project dbProject = new Project();
            string  email     = this.CB_email.Text;
            string  linkTB    = "`projeto_especialista`";
            string  filter    = DBEntity.getJoinFilter(email, Expert.ST.ST_EMAIL, dbExpert, dbProject, linkTB);

            dbProject.setFilter(filter);
            this.access.dbProjects = (List <DBEntity>)dbProject.getDataSource();
            int nProj = this.access.dbProjects.Count;

            CB_project.Items.Clear();
            for (int i = 0; i < nProj; i++)
            {
                if (((Project)this.access.dbProjects[i]).name != "NULL")
                {
                    CB_project.Items.Add(((Project)this.access.dbProjects[i]).name);
                }
            }
        }
        private void CB_email_MouseClick(object sender, MouseEventArgs e)
        {
            if (CB_email.Items.Count > 0)
            {
                return;
            }
            Project  project  = new Project();
            DBEntity dbExpert = new Expert(null);
            string   projName = this.CB_project.Text;
            string   linkTB   = "`projeto_especialista`";
            string   filter   = DBEntity.getJoinFilter(projName, Project.ST.ST_NAME, project, dbExpert, linkTB);

            dbExpert.setFilter(filter);
            this.access.dbExperts = dbExpert.getDataSource();
            int nExperts = this.access.dbExperts.Count;

            CB_email.Items.Clear();
            for (int i = 0; i < nExperts; i++)
            {
                if (((Expert)this.access.dbExperts[i]).id != 0)
                {
                    CB_email.Items.Add(((Expert)this.access.dbExperts[i]).email);
                }
            }
        }
        public List<DBEntity> getDataSource()
        {

            MySqlDataReader reader;
            CtrlConexao conexao = CtrlConexao.Instancia;
            List<DBEntity> listDBEntity = new List<DBEntity>();
            string filter = null;
            //StringBuilder strIndexAlternativas = new StringBuilder ();
            //Hashtable hashIndiceDB = new Hashtable ();

            String query = "SELECT ";
            try
            {
                //conexao.AbreConexaoMysql();

                //int m = this.nColumns - 1; 
                //for (int i = 0; i < m; i++)
                //query += DBEntity.ST.DB_NAME + this.ST_TB_NAME + "." + this.columnNames[i] + ", ";
                //query += DBEntity.ST.DB_NAME + this.ST_TB_NAME + "." + this.columnNames[m];
                //query += " FROM " + DBEntity.ST.DB_NAME + this.ST_TB_NAME;
                //query += this.getFilter();

                conexao.AbreConexaoMysql();

                int m = this.nColumns - 1;
                for (int i = 0; i < m; i++)
                query += this.columnNames[i] + ", ";
                query += this.columnNames[m];
                query += " FROM " + this.ST_TB_NAME;
                //query += this.getFilter();

                reader = conexao.ExecutaSelecaoMysql(query);
                while (reader.Read())
                {
                    DBEntity dbe = this.getDBEntity(reader);
                    listDBEntity.Add(dbe);
                }
                reader.Close();

            }
            catch (Exception exc)
            {
                MessageBox.Show(exc.StackTrace + "\n\n" + exc.Message);
            }

            //catch(Exception e){
            //    throw new Exception (">> Erro em  reader.Read: \n"+e.StackTrace+"\n provavelmente na query: \n"+query);
            //}
            finally
            {
                conexao.FecharConexaoMysql();
            }


            return listDBEntity;

        }
        public List<DBEntity> getDataSource(string selectFilter)
        {
            MySqlDataReader reader;
            CtrlConexao conexao = CtrlConexao.Instancia;
            List<DBEntity> listDBEntity = new List<DBEntity>();
            string filter = null;
            //StringBuilder strIndexAlternativas = new StringBuilder ();
            //Hashtable hashIndiceDB = new Hashtable ();

            String query = selectFilter;
            try
            {
                conexao.AbreConexaoMysql();
                query += this.getFilter();
                reader = conexao.ExecutaSelecaoMysql(query);
                while (reader.Read())
                {
                    DBEntity dbe = this.getDBEntity(reader);
                    listDBEntity.Add(dbe);
                }
                reader.Close();

            }
            catch (Exception exc)
            {
                MessageBox.Show(exc.StackTrace + "\n\n" + exc.Message);
            }

            //catch(Exception e){
            //    throw new Exception (">> Erro em  reader.Read: \n"+e.StackTrace+"\n provavelmente na query: \n"+query);
            //}
            finally
            {
                conexao.FecharConexaoMysql();
            }


            return listDBEntity;

        }
        public static string getJoinFilter (string basicFilter, string columnName, DBEntity toBase, DBEntity toSelect, string linkTable) {
            string filter = "";
            if(basicFilter!="") {
                filter  = " INNER JOIN "+DBEntity.ST.DB_NAME+linkTable;
                filter += " ON "+ DBEntity.ST.DB_NAME + toSelect.ST_TB_NAME + "." +toSelect.ST_ID + " = ";
                filter += DBEntity.ST.DB_NAME + linkTable+"." + toSelect.ST_ID;
                filter += " INNER JOIN " + DBEntity.ST.DB_NAME + toBase.ST_TB_NAME;
                filter += " ON "+ DBEntity.ST.DB_NAME + toBase.ST_TB_NAME + "." +toBase.ST_ID + " = ";
                filter += DBEntity.ST.DB_NAME + linkTable+"." + toBase.ST_ID;
                filter += " AND "+ DBEntity.ST.DB_NAME + toBase.ST_TB_NAME + "." +columnName + " = '" + basicFilter+"'";
            }

            //public static string getJoinFilter (string basicFilter, string columnName, DBEntity toBase, DBEntity toSelect, string linkTable) {
            //string filter = "";
            //if(basicFilter!="") {
               // filter  = " INNER JOIN "+DBEntity.ST.DB_NAME+linkTable+ this.ST_TB_NAME;
               // filter += " ON "+ DBEntity.ST.DB_NAME + toSelect.ST_TB_NAME + "." +toSelect.ST_ID + " = ";
               // filter += DBEntity.ST.DB_NAME + linkTable+"." + toSelect.ST_ID+ ST_TB_NAME;
               // filter += " INNER JOIN " + DBEntity.ST.DB_NAME + toBase.ST_TB_NAME;
               // filter += " ON "+ DBEntity.ST.DB_NAME + toBase.ST_TB_NAME + "." +toBase.ST_ID + " = ";
               // filter += " AND " + DBEntity.ST.DB_NAME + linkTable+"." + toBase.ST_ID ;
               // filter += " AND "+ DBEntity.ST.DB_NAME + toBase.ST_TB_NAME + "." +columnName + " = '" + basicFilter+"'";
           // }

            return filter;
        }
 public void loadDBEntity(DBEntity entity)
 {
     List <DBEntity> dbEntities = entity.getDataSource();
 }