Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

fibalous

Inserir valores de uma BD dentro de uma gridview

Mensagens Recomendadas

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?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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á

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.