DATAGRIDVIEW PREENCHER COMO PLANILHA

 Tópico anterior Próximo tópico Novo tópico

DATAGRIDVIEW PREENCHER COMO PLANILHA

C#

 Compartilhe  Compartilhe  Compartilhe
#484971 - 18/10/2018 15:14:34

PERCIFILHO
MATAO [SP]
Cadast. em:Dezembro/2009


Boa tarde pessoal!!!
Tô eu aqui quebrando a cabeça de novo.
Tenho uma tabela "Frequencia" onde são gravadas as frequencias das aulas de cada aluno e eu preciso mostrar num DataGridView de acordo com determinada turma.
A tabela está assim:

| TurmaId | AlunoId | Data            | Situacao  |
|-------------|------------|-----------------|--------------|
|       1       |      1      | 15/10/2018 | Presente |
|       1       |      2      | 15/10/2018 | Presente |
|       1       |      1      | 22/10/2018 | Ausente  |
|       1       |      2      | 22/10/2018 | Presente |

O usuáro vai selecionar uma turma e vai ser preciso mostrar a frequência dos alunos da turma escolhida dessa maneira (como se fosse uma planilha):

------------------------------------------------------------------------------
|     Id      |  Nome do Aluno          | 15/10/2018 | 22/10/2018 |
|      1      | Perci Mantovani Filho |  Presente    | Ausente      |
|      2      | José Ricardo Pereira  |  Presente    | Presente     |
-------------------------------------------------------------------------------

Alguém teria uma ideia de como fazer isso?

____________________________________________________
Você sabe que alguém te ama não pelo que ele fala, mas pelo o que faz.
O amor não sobrevive de teorias.




#484978 - 19/10/2018 09:27:39

PERCIFILHO
MATAO [SP]
Cadast. em:Dezembro/2009


Bom, pessoal, depois de muito tentar, acho que consegui algum progresso:

// primeiro crio as colunas Id e Nome do aluno
dgv.Columns.Add("Id", "Id");
dgv.Columns.Add("Nome", "Nome do Aluno");

int idTurma = Convert.ToInt32(lblId.Text);

var datas = db.Presenca.Where(x => x.TurmaId == idTurma).ToList().GroupBy(x => x.Data);
foreach (var colunaData in datas)
{
    dgv.Columns.Add(colunaData.Key.ToString().Substring(0, 10), colunaData.Key.ToString().Substring(0, 10));
}

int ultimoId = 0; // vai guardar o valor do ultimo id do aluno
int linha = -1;  // vai guardar o valor da linha

// preenche uma List() com os registros em ordem de alunos
var alunos = db.Presenca.Where(x => x.TurmaId == idTurma).OrderBy(x => x.Aluno.Nome).ThenBy(x => x.Data).ToList();

// percorre a List()
foreach (var item in alunos)
{
    // verifica se id do aluno é diferente do último id
    if (item.AlunoId != ultimoId)
    {
        linha++;
        dgv.Rows.Add(item.AlunoId, item.Aluno.Nome);
        // percorre as colunas do grid
        for (int i = 0; i < dgv.Columns.Count; i++)
        {
             // atribui o nome da coluna para a variável
            string nomeColuna = dgv.Columns[i].HeaderText;
            string data = item.Data.ToString().Substring(0, 10);

            // se a data da tabela for igual ao nome da coluna
            if (data == nomeColuna)
            {
                string situacao = "";
                if (item.Situacao == true) { situacao = "PRESENTE"; } else { situacao = "AUSENTE"; }
                dgv.Rows[linha].Cells[i].Value = situacao;
            }
        }
    }
    else
    {
        // percorre as colunas do grid
        for (int i = 0; i < dgv.Columns.Count; i++)
        {
            // atribui o nome da coluna para a variável
            string nomeColuna = dgv.Columns[i].HeaderText;
            string data = item.Data.ToString().Substring(0, 10);
    
            // se a data da tabela for igual ao nome da coluna
            if (data == nomeColuna)
            {
                string situacao = "";
                if (item.Situacao == true) { situacao = "PRESENTE"; } else { situacao = "AUSENTE"; }
                dgv.Rows[linha].Cells[i].Value = situacao;
           }
        }
    }
    // atribui o valor do ultimo id com o id do aluno
    ultimoId = item.AlunoId.Value;
}


Parece uma gambiarra, mas pelo menos funcionou.


____________________________________________________
Você sabe que alguém te ama não pelo que ele fala, mas pelo o que faz.
O amor não sobrevive de teorias.




#484979 - 19/10/2018 09:39:18

PERCIFILHO
MATAO [SP]
Cadast. em:Dezembro/2009


Agora só apareceu um problema, vejam na imagem que o DataGridView não possui a barra de rolagem horizontal.



Quando preencho os DataGridViews do sistema, tenho uma rotina que formata a aparência deles setando as propriedades:

        // formata as propriedades do DataGridView
        public static void FormataGrid(DataGridView dgv)
        {
            //corMenu = dgv.ColumnHeadersDefaultCellStyle.BackColor;
            //corMensagem = dgv.RowsDefaultCellStyle.BackColor;

            string nome_fonte = "Tahoma";
            int tamanho_fonte = 10;

            dgv.AlternatingRowsDefaultCellStyle.SelectionBackColor = Color.DimGray;
            dgv.AlternatingRowsDefaultCellStyle.BackColor = Color.White;
            dgv.ColumnHeadersDefaultCellStyle.SelectionBackColor = Color.DimGray;
            dgv.RowsDefaultCellStyle.SelectionBackColor = Color.DimGray;
            dgv.RowHeadersDefaultCellStyle.BackColor = Color.White;
            dgv.RowHeadersDefaultCellStyle.SelectionBackColor = Color.DimGray;

            dgv.ColumnHeadersDefaultCellStyle.BackColor = corMenu;
            dgv.RowsDefaultCellStyle.BackColor = corLinha;

            dgv.AutoGenerateColumns = true;
            dgv.AllowUserToAddRows = false;
            dgv.AllowUserToDeleteRows = false;
            dgv.AllowUserToOrderColumns = false;
            dgv.AllowUserToResizeColumns = false;
            dgv.AllowUserToResizeRows = false;
            dgv.AlternatingRowsDefaultCellStyle.Font = new Font(nome_fonte, tamanho_fonte, FontStyle.Regular);
            dgv.AlternatingRowsDefaultCellStyle.ForeColor = Color.Black;
            dgv.AlternatingRowsDefaultCellStyle.SelectionForeColor = Color.White;
            dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.None;
            dgv.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells;
            //dgv.BackgroundColor = Color.Gainsboro;
            dgv.BackgroundColor = corMensagem;
            //dgv.BorderStyle = BorderStyle.Fixed3D;
            dgv.BorderStyle = BorderStyle.None;
            dgv.CellBorderStyle = DataGridViewCellBorderStyle.Single;
            dgv.ColumnHeadersBorderStyle = DataGridViewHeaderBorderStyle.Single;
            dgv.ColumnHeadersDefaultCellStyle.Font = new Font(nome_fonte, tamanho_fonte, FontStyle.Regular);
            dgv.ColumnHeadersDefaultCellStyle.ForeColor = Color.Black;
            dgv.ColumnHeadersDefaultCellStyle.SelectionForeColor = Color.White;
            dgv.ColumnHeadersHeight = 30;
            dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing;
            dgv.EditMode = DataGridViewEditMode.EditProgrammatically;
            dgv.EnableHeadersVisualStyles = false;
            dgv.GridColor = Color.Gainsboro;
            dgv.MultiSelect = false;
            dgv.RowsDefaultCellStyle.Font = new Font(nome_fonte, tamanho_fonte, FontStyle.Regular);
            dgv.RowsDefaultCellStyle.ForeColor = Color.Black;
            dgv.RowsDefaultCellStyle.SelectionForeColor = Color.White;
            dgv.RowHeadersBorderStyle = DataGridViewHeaderBorderStyle.Raised;
            dgv.RowHeadersDefaultCellStyle.Font = new Font(nome_fonte, tamanho_fonte, FontStyle.Regular);
            dgv.RowHeadersDefaultCellStyle.ForeColor = Color.Black;
            dgv.RowHeadersDefaultCellStyle.SelectionForeColor = Color.White;
            dgv.RowHeadersVisible = false;
            dgv.RowHeadersWidth = 40;
            dgv.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.DisableResizing;
            dgv.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
        }

E a propriedade ScrollBars está como Both.

Talvez tenha que alterar alguma(s) propriedade(s).
Alguém saberia me responder?

____________________________________________________
Você sabe que alguém te ama não pelo que ele fala, mas pelo o que faz.
O amor não sobrevive de teorias.




#484996 - 19/10/2018 21:18:46

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe

 Anexos estao visíveis somente para usuários registrados

Como nesse caso é mais difícil explicar que mostrar, veja

_______________________________________________________________________
Gostaria de ter seu sistema Desktop "traduzido" para uma interface web? Podemos conversar...
Virei Oráculo!
The end is nigh, be ready for the nukes!


#484997 - 19/10/2018 21:25:46

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Não é exatamente o que tu quer, mas tem algumas técnicas bacanas envolvidas, incluindo sobreposição de controles em células(no caso, o datepicker)

_______________________________________________________________________
Gostaria de ter seu sistema Desktop "traduzido" para uma interface web? Podemos conversar...
Virei Oráculo!
The end is nigh, be ready for the nukes!


#485007 - 20/10/2018 15:05:00

PERCIFILHO
MATAO [SP]
Cadast. em:Dezembro/2009


Obrigado, Kerplunk, vou ver assim que puder, valeu, bom final de semana.

____________________________________________________
Você sabe que alguém te ama não pelo que ele fala, mas pelo o que faz.
O amor não sobrevive de teorias.




#485041 - 24/10/2018 08:44:27

PERCIFILHO
MATAO [SP]
Cadast. em:Dezembro/2009


Bom, retomando o projeto hoje, percebi a minha falha: o DataGridView estava com as dimensões erradas, estava maior do que o form, por isso não aparecia a barra de rolagem.
Que erro mais grotesco.


____________________________________________________
Você sabe que alguém te ama não pelo que ele fala, mas pelo o que faz.
O amor não sobrevive de teorias.




 Tópico anterior Próximo tópico Novo tópico


Tópico encerrado, respostas não sao permitidas
Encerrado por PERCIFILHO em 25/10/2018 08:41:41