Comment puis-je afficher un DateTimePicker dans un DataGridView?

y a-t-il un moyen de mettre un contrôle DateTimePicker dans le DataGridView?

j'ai coché toutes les propriétés possibles mais il donne l'option de case à cocher, boîte combo etc, mais pas le DateTimePicker.

15
demandé sur Cody Gray 2011-01-27 14:22:19

5 réponses

vous n'avez pas manqué d'option intégrée, mais il est possible de classer les deux DataGridViewColumn et DataGridViewCell classes pour héberger tout contrôle de votre choix.

cet article sur MSDN explique le processus plus en détail, et inclut même un code échantillon:

comment: Host Controls in Windows Forms cellules DataGridView

Generic DataGridView V2.0

26
répondu Cody Gray 2011-01-27 11:39:24
private void dgtest_CellClick(object sender, DataGridViewCellEventArgs e)
    {
        if (e.ColumnIndex == 0)
        {
             dtp = new DateTimePicker();
            dgtest.Controls.Add(dtp);
            dtp.Format = DateTimePickerFormat.Short;
            Rectangle Rectangle = dgtest.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, true);
            dtp.Size = new Size(Rectangle.Width, Rectangle.Height);
            dtp.Location = new Point(Rectangle.X, Rectangle.Y);

            dtp.CloseUp += new EventHandler(dtp_CloseUp);
            dtp.TextChanged += new EventHandler(dtp_OnTextChange);


            dtp.Visible = true;
        }
    }
    private void dtp_OnTextChange(object sender, EventArgs e)
    {

        dgtest.CurrentCell.Value = dtp.Text.ToString();
    } 
    void dtp_CloseUp(object sender, EventArgs e)
    { 
        dtp.Visible = false;
    } 
5
répondu rajat 2015-09-13 19:08:34

pour résoudre quelques problèmes d'entrée lors de L'utilisation du DateTimePicker dans un DataGridView, vous voudrez ajouter ce qui suit à L'échantillon de Microsoft mentionné ci-dessus. Il a fallu un certain temps pour chercher les problèmes avec l'événement valuechanged ne fonctionne pas comme prévu. Le correctif est venu à partir d'ici ( stackoverflow) et traduit en C # ci-dessous. Il a semblé approprié d'ajouter cette information ici que je continue à trouver ce post de forum lors de la recherche sur DataGridView et DateTimePicker.

    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    {

        switch (keyData & Keys.KeyCode)
        {
            case Keys.Enter:
            case Keys.Tab:
                this.dataGridView.Focus();
                break; 
        }

        return base.ProcessCmdKey(ref msg, keyData);

    }
1
répondu jhersey29 2017-05-23 12:09:27

peut-être que ce n'est pas correct, mais truc facile et même résultat........ beaucoup moins de code......J'étais en train de jouer, et bien que l'extérieur de la boîte, il suffit de mettre

je cache le mien jusqu'à ce qu'ils cliquent sur la cellule, ou vous pouvez montrer J'ai d'abord déclaré :

DateTimePicker1.Visible = False

lorsque vous cliquez dans la cellule, d'exécuter ce code...

    DateTimePicker1.Visible = True
    ActiveControl = DateTimePicker1

puis en dessous de

 Public Sub DateTimePicker1_ValueChanged(sender As System.Object, e As System.EventArgs) Handles DateTimePicker1.ValueChanged



    requestDGV.Rows(0).Cells("requestTimeOff").Value = (DateTimePicker1.Value)
    DateTimePicker1.Visible = False
    DateTimePicker1.Enabled = False

End Sub

Super Base , et je l'ai assis directement dans la boîte, n'a pas l'air de sortir de la place

ou super facile mode.......Je voudrais simplement cacher la mine jusqu'à la colonne cliquez sur

Public Sub DateTimePicker1_ValueChanged(sender As System.Object, e As System.EventArgs) Handles DateTimePicker1.ValueChanged


    requestDGV.Rows(0).Cells("requestTimeOff").Value = (DateTimePicker1.Value)

End Sub

vous avez vraiment besoin de cette ligne.....les données seront dans la grille, juste beaucoup moins de code.....

0
répondu Aaron Webb 2016-11-29 18:26:01

je pense que le gros plan de l'événement sur DateTimePicker est la plus appropriée car le changement de la valeur de déclenchement sur tout changement, tout en gros plan déclenche uniquement lorsque la totalité de la date est sélectionnée

0
répondu thomas 2016-12-01 08:41:22