Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Sign in to follow this  
fibalous

Inserir valores de uma BD dentro de uma gridview

Recommended Posts

fibalous

Antes de mais boa tarde.

Tenho uma página em que aparece uma gridview que é preenchida no code behind assim:

        public static DataTable Pivot(IDataReader dataValues, string keyColumn, string pivotNameColumn, string pivotValueColumn)
        {

            DataTable tmp = new DataTable();

            DataRow r;

            string LastKey = "//dummy//";

            int i, pValIndex, pNameIndex;

            string s;

            bool FirstRow = true;



            // Add non-pivot columns to the data table:



            pValIndex = dataValues.GetOrdinal(pivotValueColumn);

            pNameIndex = dataValues.GetOrdinal(pivotNameColumn);



            for (i = 0; i <= dataValues.FieldCount - 1; i++)

                if (i != pValIndex && i != pNameIndex)

                    tmp.Columns.Add(dataValues.GetName(i), dataValues.GetFieldType(i));



            r = tmp.NewRow();



            // now, fill up the table with the data:

            while (dataValues.Read())
            {

                // see if we need to start a new row

                if (dataValues[keyColumn].ToString() != LastKey)
                {

                    // if this isn't the very first row, we need to add the last one to the table

                    if (!FirstRow)

                        tmp.Rows.Add(r);

                    r = tmp.NewRow();

                    FirstRow = false;

                    // Add all non-pivot column values to the new row:

                    for (i = 0; i <= dataValues.FieldCount - 3; i++)

                        r[i] = dataValues[tmp.Columns[i].ColumnName];

                    LastKey = dataValues[keyColumn].ToString();

                }

                // assign the pivot values to the proper column; add new columns if needed:

                s = dataValues[pNameIndex].ToString();

                if (!tmp.Columns.Contains(s))

                    tmp.Columns.Add(s, dataValues.GetFieldType(pValIndex));

                r[s] = dataValues[pValIndex];

            }



            // add that final row to the datatable:

            tmp.Rows.Add(r);


            // Close the DataReader

            dataValues.Close();


            // and that's it!

            return tmp;

        }
            private ArrayList convertQualidade(String avaliacoes)
    {
        ArrayList lista = new ArrayList();
        lista.Add(" ");

        for (int i = 0; i != avaliacoes.Length - 1; i++)
        {
            if (!lista[i].Equals(";"))
                lista[0] += avaliacoes[i].ToString();
            else
                lista.Add(avaliacoes[i].ToString());
        }

        return lista;
    }

    private void preencherMapa(string ano, string mes)
    {
        SqlConnection conn = new SqlConnection(new connectionString().getConnection());
        conn.Open();
            SqlCommand sql = new SqlCommand("SELECT aspnet_Users.UserName, avaliacao_Qualidade.media, idAvaliacao FROM aspnet_Users,tbl_colaboradores, avaliacao_Qualidade, aspnet_UsersInRoles, aspnet_Roles WHERE avaliacao_Qualidade.idColaborador = tbl_colaboradores.id_Colaborador AND tbl_colaboradores.id_User = aspnet_Users.UserId AND aspnet_Users.UserId = aspnet_UsersInRoles.UserId AND aspnet_UsersInRoles.RoleId = aspnet_Roles.RoleId AND aspnet_Roles.RoleName = 'operador' AND activo = 1 AND datepart(month, data) = " + mes + " AND datepart(year, data) = " + ano + " UNION SELECT username, 0, 0 FROM tbl_Colaboradores, aspnet_Users, aspnet_Roles, aspnet_UsersInRoles WHERE aspnet_Roles.RoleName = 'operador' AND activo = 1 AND aspnet_Users.UserId = id_User AND aspnet_UsersInRoles.UserId = aspnet_Users.UserId AND aspnet_UsersInRoles.RoleId = aspnet_Roles.RoleId AND tbl_Colaboradores.id_Colaborador NOT IN (SELECT idColaborador FROM avaliacao_Qualidade WHERE datepart(month, data) = " + mes + " AND datepart(year, data) = " + ano + ") ORDER BY aspnet_Users.UserName", conn);
        SqlDataReader reader = sql.ExecuteReader();
            ArrayList avaliacoes = new ArrayList();
        ArrayList logins = new ArrayList();
        logins.Add("dummy");

        while (reader.Read())
        {
            if (!reader[1].Equals(System.DBNull.Value))
            {
                if (((String)logins[logins.Count - 1]).Equals(reader[0].ToString()))
                {
                    avaliacoes[logins.Count - 2] += reader[1] + ";";
                }
                else
                {
                    logins.Add(reader[0].ToString());
                    avaliacoes.Add(reader[1].ToString() + ";");
                }
            }
            else
            {
                logins.Add(reader[0].ToString());
                avaliacoes.Add("");
            }
        }
        logins.RemoveAt(0);
        reader.Close();

        ArrayList mediaItems = new ArrayList();
        sql = new SqlCommand("SELECT aspnet_Users.UserName, ROUND(AVG(avaliacao_Qualidade.introducao), 2) AS Expr1, ROUND(AVG(avaliacao_Qualidade.imparcialidadeIsencao), 2) AS Expr2, ROUND(AVG(avaliacao_Qualidade.rigorRecolha), 2) AS Expr3, ROUND(AVG(avaliacao_Qualidade.linguagem), 2) AS Expr4, ROUND(AVG(avaliacao_Qualidade.leituraQuestionario), 2) AS Expr5 FROM aspnet_Users INNER JOIN tbl_colaboradores ON aspnet_Users.UserId = tbl_colaboradores.id_User INNER JOIN aspnet_UsersInRoles ON aspnet_Users.UserId = aspnet_UsersInRoles.UserId INNER JOIN aspnet_Roles ON aspnet_UsersInRoles.RoleId = aspnet_Roles.RoleId LEFT OUTER JOIN avaliacao_Qualidade ON tbl_colaboradores.id_Colaborador = avaliacao_Qualidade.idColaborador WHERE (aspnet_Roles.RoleName = 'operador') AND (tbl_colaboradores.activo = 1) AND datepart(month, data) = " + mes + " AND datepart(year, data) = " + ano + " GROUP BY aspnet_Users.UserName UNION SELECT username, 0, 0, 0, 0, 0 FROM tbl_Colaboradores, aspnet_Users, aspnet_Roles, aspnet_UsersInRoles WHERE (aspnet_Roles.RoleName = 'operador') AND activo = 1 AND aspnet_Users.UserId = id_User AND aspnet_UsersInRoles.UserId = aspnet_Users.UserId AND aspnet_UsersInRoles.RoleId = aspnet_Roles.RoleId 	AND tbl_Colaboradores.id_Colaborador NOT IN (SELECT idColaborador FROM avaliacao_Qualidade WHERE datepart(month, data) = " + mes + " AND datepart(year, data) = " + ano + ") ORDER BY aspnet_Users.UserName", conn);
        reader = sql.ExecuteReader();

        int k = 0;
        while (reader.Read())
        {
            if (!reader[1].Equals(DBNull.Value))
                mediaItems.Add(reader.GetDouble(1));
            else
                mediaItems.Add(0);

            if (!reader[2].Equals(DBNull.Value))
            {
                if (reader.GetDouble(2) < Convert.ToDouble(mediaItems[k].ToString()))
                    mediaItems[k] = reader.GetDouble(2);
            }

            if (!reader[3].Equals(DBNull.Value))
            {
                if (reader.GetDouble(3) < (Convert.ToDouble(mediaItems[k].ToString())))
                    mediaItems[k] = reader.GetDouble(3);
            }

            if (!reader[4].Equals(DBNull.Value))
            {
                if (reader.GetDouble(4) < Convert.ToDouble(mediaItems[k].ToString()))
                    mediaItems[k] = reader.GetDouble(4);
            }

            if (!reader[5].Equals(DBNull.Value))
            {
                if (reader.GetDouble(5) < Convert.ToDouble(mediaItems[k].ToString()))
                    mediaItems[k] = reader.GetDouble(5);
            }

            if (Convert.ToDouble(mediaItems[k].ToString()) == 0)
                mediaItems[k] = "";

            k++;
        }

        DataSet ds = new DataSet();
        DataTable dt = new DataTable();
        dt = ds.Tables.Add("Utilizadores");

        dt.Columns.Add("Login", Type.GetType("System.String"));
        dt.Columns.Add("C1", Type.GetType("System.String"));
        dt.Columns.Add("C2", Type.GetType("System.String"));
        dt.Columns.Add("C3", Type.GetType("System.String"));
        dt.Columns.Add("C4", Type.GetType("System.String"));
        dt.Columns.Add("C5", Type.GetType("System.String"));
        dt.Columns.Add("C6", Type.GetType("System.String"));
        dt.Columns.Add("C7", Type.GetType("System.String"));
        dt.Columns.Add("C8", Type.GetType("System.String"));
        dt.Columns.Add("C9", Type.GetType("System.String"));
        dt.Columns.Add("C10", Type.GetType("System.String"));
        dt.Columns.Add("C11", Type.GetType("System.String"));
        dt.Columns.Add("C12", Type.GetType("System.String"));
        dt.Columns.Add("Média", Type.GetType("System.String"));
        dt.Columns.Add("Média Ranking", Type.GetType("System.String"));
        for (int i = 0; i != logins.Count; i++)
        {

            DataRow dr = dt.NewRow();
            dr[0] = logins[i].ToString();

            int drEscrever = 1;
            string nr = "";
            double total = 0;
            double media = 0;

            for (int j = 0; j != avaliacoes[i].ToString().Length; j++)
            {
                if (!avaliacoes[i].ToString()[j].Equals(';'))
                {
                    /*if (avaliacao[i].Equals('Fiscalização'))
                      {*/
                    dr[drEscrever] += String.Format("{0:#.##}", avaliacoes[i].ToString()[j].ToString());
                    nr += avaliacoes[i].ToString()[j].ToString();
                    dr[drEscrever] += String.Format("{0:#.##}", avaliacoes[i].ToString()[j].ToString());
                    /*}
                      else
                       {
                     //e.Row.Cells[i].Font.Bold = true; 
                     dr[drEscrever] += String.Format("{0:#.##}", avaliacoes[i].ToString()[j].ToString());
                         nr += avaliacoes[i].ToString()[j].ToString();
                      }*/
                }
                else
                {
                    total += Convert.ToDouble(nr);
                    nr = "";
                    media++;
                    drEscrever++;
                    //dr[drEscrever] = avaliacoes[i].ToString()[j].ToString();
                }

            }
            if (total != 0)
            {
                dr["Média"] = String.Format("{0:#.##}", total / media);
                if (!mediaItems[i].Equals("") && Convert.ToDouble(mediaItems[i].ToString()) < (total / media))
                    dr["Média Ranking"] = String.Format("{0:#.##}", mediaItems[i].ToString());
                else
                    dr["Média Ranking"] = String.Format("{0:#.##}", total / media);
            }
            dt.Rows.Add(dr);
        }

        GridView2.DataSource = ds;
        GridView2.DataBind();

        conn.Close();
    }

    protected void preencherDropDownMeses()
    {
        DataSet ds = new QueryDB("SELECT distinct datepart(month, data), datepart(year, data) FROM avaliacao_Qualidade ORDER BY datepart(year, data), datepart(month, data)", null).selectToDataSet();
        ArrayList datas = new ArrayList();
        foreach (DataRow dr in ds.Tables[0].Rows)
        {
            datas.Add(dr[0].ToString() + "/" + dr[1].ToString());
        }

        DropDownListMes.Items.Clear();

        for (int i = 0; i != datas.Count; i++)
        {
            DropDownListMes.Items.Add(datas[i].ToString());
        }
    }

Desculpem todo este código...a 1ª função vai definir as dimensões da gridview e a segunda vai preencher.

O problema é o seguinte quando ele escreve os valores por exemplo escreve caracteres singulares, por exemplo:

Um valor que seja 3,94 ele vai escrever primeiro o 3 depois a virgula depois o 9 e depois o 4 em vez de escrever tudo de uma vez. Alguém sabe como posso fazer isso?

Share this post


Link to post
Share on other sites
fibalous

Boa tarde, eu estou a separar os valores com ";" para mais tarde juntá-los isto complica um "pouco" mais mas não sei fazer de outra forma, sugeriram-me que use o dicionário <string, string> como posso faze-lo? Alguma sugestão? Aqui está o código:

            while (reader.Read())
            {
                if (!reader[1].Equals(System.DBNull.Value))
                {
                    if (((String)logins[logins.Count - 1]).Equals(reader[0].ToString()))
                    {
                        avaliacoes[logins.Count - 2] += reader[1] + ";";
                    }
                    else
                    {
                        logins.Add(reader[0].ToString());
                        avaliacoes.Add(reader[1].ToString() + ";");
                    }
                }
                else
                {
                    logins.Add(reader[0].ToString());
                    avaliacoes.Add("");
                }
                if (!reader[1].Equals(DBNull.Value))
                    mediaItems.Add(reader.GetDouble(1));
                else
                    mediaItems.Add(0);

                if (!reader[2].Equals(DBNull.Value))
                {
                    if (reader.GetDouble(2) < Convert.ToDouble(mediaItems[k].ToString()))
                        mediaItems[k] = reader.GetDouble(2);
                }

                if (!reader[3].Equals(DBNull.Value))
                {
                    if (reader.GetDouble(3) < (Convert.ToDouble(mediaItems[k].ToString())))
                        mediaItems[k] = reader.GetDouble(3);
                }

                if (!reader[4].Equals(DBNull.Value))
                {
                    if (reader.GetDouble(4) < Convert.ToDouble(mediaItems[k].ToString()))
                        mediaItems[k] = reader.GetDouble(4);
                }

                if (!reader[5].Equals(DBNull.Value))
                {
                    if (reader.GetDouble(5) < Convert.ToDouble(mediaItems[k].ToString()))
                        mediaItems[k] = reader.GetDouble(5);
                }

                if (Convert.ToDouble(mediaItems[k].ToString()) == 0)
                    mediaItems[k] = "";

                k++;
            }

Obrigado desde já

Share this post


Link to post
Share on other sites
fibalous

Bem tanto mudei tanto mudei que voltei ao código que tinha inicialmente, ele funciona sem problemas só que quando tento tornar esses valores em links é que a porca torce o rabo os valores saem todos mal. Alguém sabe ajudar?

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.