en

MSGuayaquil

Recursos esenciales para el desarrollador .NET

eXpert RoadShow

Formato a una columna del Grid

Último post 04-24-2007 4:06 PM escrito por John. 1 respuestas.
Página 1 de 1 (2 elementos)
Ordenar mensajes: Anterior Siguiente
  • 04-24-2007 9:52 AM

    Formato a una columna del Grid

    Buenos dias

     Por acaso me podrian dar una mano necesito dar formato a una columna del datagrid la cual presenta un dato tipo "datetime" que recibe del SQL, la situcion es como podria darle el formato en tiempo de ejecucion via codigo para que solo me muestre la fecha mas no la hora.

    cabe indicar que este grid se esta trabajando en modo conectado con recordset.

    Gracias y Saludos

    Manuel Andres

    • Puntos de post: 0
  • 04-24-2007 4:06 PM en respuesta a

    • John
    • Contribuyente Top 25
    • Se unió el 04-21-2007
    • Guayaquil
    • Envíos: 22
    • Puntos: 0

    Re: Formato a una columna del Grid

    Si pudiera adjuntar una imagen de como queda el DataGridView con esta columna para editar tipos DateTime...
    Esto es mas que solo mostrar una fecha, te presenta un DateTimePicker en la celda cuando estas editando.
    Compañero creo que esto te servira:

    namespace Post 


            using System; 
            using System.Drawing; 
            using System.Windows.Forms; 
              
            public class DataGridViewDatePickerEditingControl : DateTimePicker, IDataGridViewEditingControl 
            { 

                    #region Fields 
                    private DataGridView dataGridView; 
                    private int rowIndex; 
                    private bool valueChanged; 
                    private bool repositionOnValueChange; 

                    #endregion 

                    #region .ctor() 
                    public DataGridViewDatePickerEditingControl() 
                            : base() 
                    { 
                            base.Checked = false; 
                            base.ShowCheckBox = true; 
                            base.CustomFormat = "dd/MM/yyyy"; 
                            base.Format = DateTimePickerFormat.Custom; 
                    } 

                    #endregion 

                    #region IDataGridViewEditingControl Members 
                    public void ApplyCellStyleToEditingControl(DataGridViewCellStyle dataGridViewCellStyle) 
                    { 
                            this.Font = dataGridViewCellStyle.Font; 
                            if (dataGridViewCellStyle.BackColor.A 
                            { 
                                    Color color = Color.FromArgb(255, dataGridViewCellStyle.BackColor); 
                                    this.BackColor = color; 
                                    this.dataGridView.EditingPanel.BackColor = color; 
                            } 
                            else 
                            { 
                                    this.BackColor = dataGridViewCellStyle.BackColor; 
                            } 
                            this.ForeColor = dataGridViewCellStyle.ForeColor; 
                            repositionOnValueChange = (dataGridViewCellStyle.WrapMode == DataGridViewTriState.True);// && (dataGridViewCellStyle.Alignment & anytop)); 
                    } 

                    public DataGridView EditingControlDataGridView 
                    { 
                            get { return dataGridView; } 
                            set { dataGridView = value; } 
                    } 

                    public object EditingControlFormattedValue 
                    { 
                            get 
                            { 
                                    throw new Exception("The method or operation is not implemented."); 
                            } 
                            set { this.Value = (DateTime)value; } 
                    } 

                    public int EditingControlRowIndex 
                    { 
                            get { return rowIndex; } 
                            set { rowIndex = value; } 
                    } 

                    public bool EditingControlValueChanged 
                    { 
                            get { return valueChanged; } 
                            set { valueChanged = value; } 
                    } 

                    public bool EditingControlWantsInputKey(Keys keyData, bool dataGridViewWantsInputKey) 
                    { 
                            return true; 
                    } 

                    public Cursor EditingPanelCursor 
                    { 
                            get { return Cursors.Default; } 
                    } 

                    public object GetEditingControlFormattedValue(DataGridViewDataErrorContexts context) 
                    { 
                            return this.Value; 
                    } 

                    public void PrepareEditingControlForEdit(bool selectAll) 
                    { 
                            // 
                    } 

                    public bool RepositionEditingControlOnValueChange 
                    { 
                            get { return repositionOnValueChange; } 
                    } 

                    #endregion 

            } 

            public class DataGridViewDatePickerCell : DataGridViewCell 
            { 

                    #region Fields 
                    private byte flagsState; 

                    #endregion 

                    #region Properties 
                    public override Type EditType 
                    { 
                            get { return typeof(DataGridViewDatePickerEditingControl); } 
                    } 

                    public override Type FormattedValueType 
                    { 
                            get { return typeof(string); } 
                    } 

                    #endregion 

                    #region .ctor() 
                    public DataGridViewDatePickerCell() 
                            : base() 
                    { 
                    } 

                    #endregion 

                    #region Privates 
                    private Rectangle GetAdjustedEditingControlBounds(Rectangle editingControlBounds, DataGridViewCellStyle cellStyle) 
                    { 
                            int height; 
                            DateTimePicker picker = base.DataGridView.EditingControl as DateTimePicker; 
                            int maxWidth = editingControlBounds.Width; 
                            if (picker != null) 
                            { 
                                    switch (cellStyle.Alignment) 
                                    { 
                                            case DataGridViewContentAlignment.TopLeft: 
                                            case DataGridViewContentAlignment.MiddleLeft: 
                                            case DataGridViewContentAlignment.BottomLeft: 
                                                    editingControlBounds.X += 3; 
                                                    editingControlBounds.Width = Math.Max(0, (editingControlBounds.Width - 3) - 1); 
                                                    break; 

                                            case DataGridViewContentAlignment.TopCenter: 
                                            case DataGridViewContentAlignment.MiddleCenter: 
                                            case DataGridViewContentAlignment.BottomCenter: 
                                                    editingControlBounds.X++; 
                                                    editingControlBounds.Width = Math.Max(0, editingControlBounds.Width - 3); 
                                                    break; 

                                            case DataGridViewContentAlignment.TopRight: 
                                            case DataGridViewContentAlignment.BottomRight: 
                                            case DataGridViewContentAlignment.MiddleRight: 
                                                    editingControlBounds.X++; 
                                                    editingControlBounds.Width = Math.Max(0, (editingControlBounds.Width - 4) - 1); 
                                                    break; 
                                    } 
                                    switch (cellStyle.Alignment) 
                                    { 
                                            case DataGridViewContentAlignment.TopLeft: 
                                            case DataGridViewContentAlignment.TopCenter: 
                                            case DataGridViewContentAlignment.TopRight: 
                                                    editingControlBounds.Y += 2; 
                                                    editingControlBounds.Height = Math.Max(0, editingControlBounds.Height - 2); 
                                                    break; 

                                            case DataGridViewContentAlignment.MiddleLeft: 
                                            case DataGridViewContentAlignment.MiddleCenter: 
                                            case DataGridViewContentAlignment.MiddleRight: 
                                                    editingControlBounds.Height++; 
                                                    break; 

                                            case DataGridViewContentAlignment.BottomCenter: 
                                            case DataGridViewContentAlignment.BottomRight: 
                                            case DataGridViewContentAlignment.BottomLeft: 
                                                    editingControlBounds.Height = Math.Max(0, editingControlBounds.Height - 1); 
                                                    break; 
                                    } 
                                    if (cellStyle.WrapMode == DataGridViewTriState.False) 
                                    { 
                                            height = picker.PreferredSize.Height; 
                                    } 
                                    else 
                                    { 
                                            string editingControlFormattedValue = (string)((IDataGridViewEditingControl)picker).GetEditingControlFormattedValue(DataGridViewDataErrorContexts.Formatting); 
                                            if (string.IsNullOrEmpty(editingControlFormattedValue)) 
                                            { 
                                                    editingControlFormattedValue = " "; 
                                            } 
                                            TextFormatFlags flags = ComputeTextFormatFlagsForCellStyleAlignment(cellStyle.Alignment, cellStyle.WrapMode); 
                                            height = DataGridViewCell.MeasureTextHeight(base.DataGridView.CreateGraphics(), editingControlFormattedValue, cellStyle.Font, maxWidth, flags); 
                                    } 
                                    if (height 
                                    { 
                                            DataGridViewContentAlignment alignment = cellStyle.Alignment; 
                                            if (alignment 
                                            { 
                                                    switch (alignment) 
                                                    { 
                                                            case DataGridViewContentAlignment.TopLeft: 
                                                            case DataGridViewContentAlignment.TopCenter: 
                                                            case (DataGridViewContentAlignment.TopCenter | DataGridViewContentAlignment.TopLeft): 
                                                            case DataGridViewContentAlignment.TopRight: 
                                                                    return editingControlBounds; 

                                                            case DataGridViewContentAlignment.MiddleLeft: 
                                                            case DataGridViewContentAlignment.MiddleCenter: 
                                                                    goto Label_0310; 
                                                    } 
                                                    return editingControlBounds; 
                                            } 
                                            if (alignment 
                                            { 
                                                    switch (alignment) 
                                                    { 
                                                            case DataGridViewContentAlignment.MiddleRight: 
                                                                    goto Label_0310; 

                                                            case DataGridViewContentAlignment.BottomLeft: 
                                                                    goto Label_032B; 
                                                    } 
                                                    return editingControlBounds; 
                                            } 
                                            switch (alignment) 
                                            { 
                                                    case DataGridViewContentAlignment.BottomCenter: 
                                                    case DataGridViewContentAlignment.BottomRight: 
                                                            goto Label_032B; 
                                            } 
                                    } 
                            } 
                            return editingControlBounds; 
                    Label_0310: 
                            editingControlBounds.Y += (editingControlBounds.Height - height) / 2; 
                            return editingControlBounds; 
                    Label_032B: 
                            editingControlBounds.Y += editingControlBounds.Height - height; 
                            return editingControlBounds; 
                    } 

                    private Rectangle PaintPrivate(Graphics graphics, Rectangle clipBounds, Rectangle cellBounds, int rowIndex, 
                            DataGridViewElementStates cellState, object formattedValue, string errorText, 
                            DataGridViewCellStyle cellStyle, DataGridViewAdvancedBorderStyle advancedBorderStyle, 
                            DataGridViewPaintParts paintParts, bool computeContentBounds, bool computeErrorIconBounds, bool paint) 
                    { 
                            SolidBrush cachedBrush; 
                            Rectangle empty = Rectangle.Empty; 
                            if (paint) 
                            { 
                                    this.PaintBorder(graphics, clipBounds, cellBounds, cellStyle, advancedBorderStyle); 
                            } 
                            Rectangle rectangle2 = this.BorderWidths(advancedBorderStyle); 
                            Rectangle rect = cellBounds; 
                            rect.Offset(rectangle2.X, rectangle2.Y); 
                            rect.Width -= rectangle2.Right; 
                            rect.Height -= rectangle2.Bottom; 
                            Point currentCellAddress = base.DataGridView.CurrentCellAddress; 
                            bool flag = (currentCellAddress.X == base.ColumnIndex) && (currentCellAddress.Y == rowIndex); 
                            bool flag2 = flag && (base.DataGridView.EditingControl != null); 
                            bool flag3 = (cellState & DataGridViewElementStates.Selected) != DataGridViewElementStates.None; 
                            if (flag3 && !flag2) 
                                    cachedBrush = new SolidBrush(cellStyle.SelectionBackColor); 
                            else 
                                    cachedBrush = new SolidBrush(cellStyle.BackColor); 

                            if ((paint && ((cachedBrush.Color.A == 255) && (rect.Width > 0))) && (rect.Height > 0)) 
                                    graphics.FillRectangle(cachedBrush, rect); 

                            if (cellStyle.Padding != Padding.Empty) 
                            { 
                                    rect.Offset(cellStyle.Padding.Left, cellStyle.Padding.Top); 
                                    rect.Width -= cellStyle.Padding.Horizontal; 
                                    rect.Height -= cellStyle.Padding.Vertical; 
                            } 
                            if (((paint && flag) && !flag2) && ((base.DataGridView.Focused) && ((rect.Width > 0) && (rect.Height > 0)))) 
                            { 
                                    ControlPaint.DrawFocusRectangle(graphics, rect, Color.Empty, cachedBrush.Color); 
                            } 
                            Rectangle cellValueBounds = rect; 
                            string text = (formattedValue is DateTime) ? ((DateTime)formattedValue).ToString("dd/MM/yyyy") : (string)formattedValue; //!= null && formattedValue is DateTime) ? ((DateTime)formattedValue).ToString("dd/MM/yyyy") : string.Empty; 
                            if ((text != null) && ((paint && !flag2) || computeContentBounds)) 
                            { 
                                    int y = (cellStyle.WrapMode == DataGridViewTriState.True) ? 1 : 2; 
                                    rect.Offset(0, y); 
                                    rect.Width = rect.Width; 
                                    rect.Height -= y + 1; 
                                    if ((rect.Width > 0) && (rect.Height > 0)) 
                                    { 
                                            TextFormatFlags flags = ComputeTextFormatFlagsForCellStyleAlignment(cellStyle.Alignment, cellStyle.WrapMode); 
                                            if (paint) 
                                            { 
                                                    if ((flags & TextFormatFlags.SingleLine) != TextFormatFlags.GlyphOverhangPadding) 
                                                            flags |= TextFormatFlags.EndEllipsis; 

                                                    TextRenderer.DrawText(graphics, text, cellStyle.Font, rect, flag3 ? cellStyle.SelectionForeColor : cellStyle.ForeColor, flags); 
                                            } 
                                            else 
                                                    empty = GetTextBounds(rect, text, flags, cellStyle); 
                                    } 
                            } 
                            return empty; 
                    } 

                    internal static TextFormatFlags ComputeTextFormatFlagsForCellStyleAlignment(DataGridViewContentAlignment alignment, DataGridViewTriState wrapMode) 
                    { 
                            TextFormatFlags glyphOverhangPadding; 
                            switch (alignment) 
                            { 
                                    case DataGridViewContentAlignment.TopLeft: 
                                            glyphOverhangPadding = TextFormatFlags.GlyphOverhangPadding; 
                                            glyphOverhangPadding |= TextFormatFlags.Right; 
                                            break; 

                                    case DataGridViewContentAlignment.TopCenter: 
                                            glyphOverhangPadding = TextFormatFlags.HorizontalCenter; 
                                            break; 

                                    case DataGridViewContentAlignment.TopRight: 
                                            glyphOverhangPadding = TextFormatFlags.GlyphOverhangPadding; 
                                            glyphOverhangPadding |= TextFormatFlags.Right; 
                                            break; 

                                    case DataGridViewContentAlignment.MiddleLeft: 
                                            glyphOverhangPadding = TextFormatFlags.VerticalCenter; 
                                            glyphOverhangPadding |= TextFormatFlags.Right; 
                                            break; 

                                    case DataGridViewContentAlignment.MiddleCenter: 
                                            glyphOverhangPadding = TextFormatFlags.VerticalCenter | TextFormatFlags.HorizontalCenter; 
                                            break; 

                                    case DataGridViewContentAlignment.BottomCenter: 
                                            glyphOverhangPadding = TextFormatFlags.Bottom | TextFormatFlags.HorizontalCenter; 
                                            break; 

                                    case DataGridViewContentAlignment.BottomRight: 
                                            glyphOverhangPadding = TextFormatFlags.Bottom; 
                                            glyphOverhangPadding |= TextFormatFlags.Right; 
                                            break; 

                                    case DataGridViewContentAlignment.MiddleRight: 
                                            glyphOverhangPadding = TextFormatFlags.VerticalCenter; 
                                            glyphOverhangPadding |= TextFormatFlags.Right; 
                                            break; 

                                    case DataGridViewContentAlignment.BottomLeft: 
                                            glyphOverhangPadding = TextFormatFlags.Bottom; 
                                            glyphOverhangPadding |= TextFormatFlags.Right; 
                                            break; 

                                    default: 
                                            glyphOverhangPadding = TextFormatFlags.VerticalCenter | TextFormatFlags.HorizontalCenter; 
                                            break; 
                            } 
                            if (wrapMode == DataGridViewTriState.False) 
                            { 
                                    glyphOverhangPadding |= TextFormatFlags.SingleLine; 
                            } 
                            else 
                            { 
                                    glyphOverhangPadding |= TextFormatFlags.WordBreak; 
                            } 
                            glyphOverhangPadding |= TextFormatFlags.NoPrefix; 
                            glyphOverhangPadding |= TextFormatFlags.PreserveGraphicsClipping; 
                            return glyphOverhangPadding; 
                    } 

                    internal static Rectangle GetTextBounds(Rectangle cellBounds, string text, TextFormatFlags flags, DataGridViewCellStyle cellStyle) 
                    { 
                            return GetTextBounds(cellBounds, text, flags, cellStyle, cellStyle.Font); 
                    } 

                    internal static Rectangle GetTextBounds(Rectangle cellBounds, string text, TextFormatFlags flags, DataGridViewCellStyle cellStyle, Font font) 
                    { 
                            if (((flags & TextFormatFlags.SingleLine) != TextFormatFlags.GlyphOverhangPadding) && (TextRenderer.MeasureText(text, font, new Size(2147483647, 2147483647), flags).Width > cellBounds.Width)) 
                            { 
                                    flags |= TextFormatFlags.EndEllipsis; 
                            } 
                            Size proposedSize = new Size(cellBounds.Width, cellBounds.Height); 
                            Size size = TextRenderer.MeasureText(text, font, proposedSize, flags); 
                            if (size.Width > proposedSize.Width) 
                            { 
                                    size.Width = proposedSize.Width; 
                            } 
                            if (size.Height > proposedSize.Height) 
                            { 
                                    size.Height = proposedSize.Height; 
                            } 
                            if (size == proposedSize) 
                            { 
                                    return cellBounds; 
                            } 
                            return new Rectangle(GetTextLocation(cellBounds, size, flags, cellStyle), size); 
                    } 

                    internal static Point GetTextLocation(Rectangle cellBounds, Size sizeText, TextFormatFlags flags, DataGridViewCellStyle cellStyle) 
                    { 
                            Point point = new Point(0, 0); 
                            DataGridViewContentAlignment middleLeft = cellStyle.Alignment; 
                            if ((flags & TextFormatFlags.RightToLeft) != TextFormatFlags.GlyphOverhangPadding) 
                            { 
                                    switch (middleLeft) 
                                    { 
                                            case DataGridViewContentAlignment.MiddleRight: 
                                                    middleLeft = DataGridViewContentAlignment.MiddleLeft; 
                                                    break; 

                                            case DataGridViewContentAlignment.BottomLeft: 
                                                    middleLeft = DataGridViewContentAlignment.BottomRight; 
                                                    break; 

                                            case DataGridViewContentAlignment.BottomRight: 
                                                    middleLeft = DataGridViewContentAlignment.BottomLeft; 
                                                    break; 

                                            case DataGridViewContentAlignment.TopLeft: 
                                                    middleLeft = DataGridViewContentAlignment.TopRight; 
                                                    break; 

                                            case DataGridViewContentAlignment.TopRight: 
                                                    middleLeft = DataGridViewContentAlignment.TopLeft; 
                                                    break; 

                                            case DataGridViewContentAlignment.MiddleLeft: 
                                                    middleLeft = DataGridViewContentAlignment.MiddleRight; 
                                                    break; 
                                    } 
                            } 
                            DataGridViewContentAlignment alignment3 = middleLeft; 
                            if (alignment3 
                            { 
                                    switch (alignment3) 
                                    { 
                                            case DataGridViewContentAlignment.TopLeft: 
                                                    point.X = cellBounds.X; 
                                                    point.Y = cellBounds.Y; 
                                                    return point; 

                                            case DataGridViewContentAlignment.TopCenter: 
                                                    point.X = cellBounds.X + ((cellBounds.Width - sizeText.Width) / 2); 
                                                    point.Y = cellBounds.Y; 
                                                    return point; 

                                            case (DataGridViewContentAlignment.TopCenter | DataGridViewContentAlignment.TopLeft): 
                                                    return point; 

                                            case DataGridViewContentAlignment.TopRight: 
                                                    point.X = cellBounds.Right - sizeText.Width; 
                                                    point.Y = cellBounds.Y; 
                                                    return point; 

                                            case DataGridViewContentAlignment.MiddleLeft: 
                                                    point.X = cellBounds.X; 
                                                    point.Y = cellBounds.Y + ((cellBounds.Height - sizeText.Height) / 2); 
                                                    return point; 

                                            case DataGridViewContentAlignment.MiddleCenter: 
                                                    point.X = cellBounds.X + ((cellBounds.Width - sizeText.Width) / 2); 
                                                    point.Y = cellBounds.Y + ((cellBounds.Height - sizeText.Height) / 2); 
                                                    return point; 
                                    } 
                                    return point; 
                            } 
                            if (alignment3 
                            { 
                                    switch (alignment3) 
                                    { 
                                            case DataGridViewContentAlignment.MiddleRight: 
                                                    point.X = cellBounds.Right - sizeText.Width; 
                                                    point.Y = cellBounds.Y + ((cellBounds.Height - sizeText.Height) / 2); 
                                                    return point; 

                                            case DataGridViewContentAlignment.BottomLeft: 
                                                    point.X = cellBounds.X; 
                                                    point.Y = cellBounds.Bottom - sizeText.Height; 
                                                    return point; 
                                    } 
                              &nb