-----------------------------------------------------------

New Message on BDOTNET

-----------------------------------------------------------
From: LovedJohnySmith
Message 4 in Discussion

Suresh, You can use DataGridView.CurrentRow.Index,  let me give you small 
scenario, where we can use this...  We have a column that has integer data in 
it, We want to display it as a progress bar in the column so the user can 
quickly identify lagging processes.  
We would also like to change the color of the progress bar based on the cells 
value. 
For this situation, have a look at the following code snippets using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Drawing;
using System.ComponentModel;
namespace Sample
{ 
    public class DataGridViewProgressColumn : DataGridViewImageColumn
    {
        public DataGridViewProgressColumn()
        {
            CellTemplate = new DataGridViewProgressCell();
        }
    }
}
namespace Sample
{
    class DataGridViewProgressCell : DataGridViewImageCell  
    {
        // Used to make custom cell consistent with a DataGridViewImageCell
        static Image emptyImage;
        static DataGridViewProgressCell()
        {
            emptyImage = new Bitmap(1, 1, 
System.Drawing.Imaging.PixelFormat.Format32bppArgb);
        }
        public DataGridViewProgressCell()
        {
            this.ValueType = typeof(int);
        }
        // Method required to make the Progress Cell consistent with the 
default Image Cell. 
        // The default Image Cell assumes an Image as a value, although the 
value of the Progress Cell is an int.
        protected override object GetFormattedValue(object value,
                            int rowIndex, ref DataGridViewCellStyle cellStyle,
                            TypeConverter valueTypeConverter,
                            TypeConverter formattedValueTypeConverter,
                            DataGridViewDataErrorContexts context)
        {
            return emptyImage;
        }
        
        protected override void Paint(System.Drawing.Graphics g, 
System.Drawing.Rectangle clipBounds, System.Drawing.Rectangle cellBounds, int 
rowIndex, DataGridViewElementStates cellState, object value, object 
formattedValue, string errorText, DataGridViewCellStyle cellStyle, 
DataGridViewAdvancedBorderStyle advancedBorderStyle, DataGridViewPaintParts 
paintParts)
        {
            int progressVal = (int)value;
            float percentage = ((float)progressVal / 100.0f); // Need to 
convert to float before division; otherwise C# returns int which is 0 for 
anything but 100%.
            Brush backColorBrush = new SolidBrush(cellStyle.BackColor);
            Brush foreColorBrush = new SolidBrush(cellStyle.ForeColor);
            // Draws the cell grid
            base.Paint(g, clipBounds, cellBounds,
             rowIndex, cellState, value, formattedValue, errorText,
             cellStyle, advancedBorderStyle, (paintParts & 
~DataGridViewPaintParts.ContentForeground));
            if (percentage > 0.0)
            {
                // Draw the progress bar and the text
                g.FillRectangle(new SolidBrush(Color.FromArgb(163, 189, 242)), 
cellBounds.X + 2, cellBounds.Y + 2, Convert.ToInt32((percentage * 
cellBounds.Width - 4)), cellBounds.Height - 4);
                g.DrawString(progressVal.ToString() + "%", cellStyle.Font, 
foreColorBrush, cellBounds.X + 6, cellBounds.Y + 2);
            }
            else
            {
                // draw the text
                if (this.DataGridView.CurrentRow.Index == rowIndex)
                    g.DrawString(progressVal.ToString() + "%", cellStyle.Font, 
new SolidBrush(cellStyle.SelectionForeColor), cellBounds.X + 6, cellBounds.Y + 
2);
                else
                    g.DrawString(progressVal.ToString() + "%", cellStyle.Font, 
foreColorBrush, cellBounds.X + 6, cellBounds.Y + 2);
            }
        }
    }
}
  Thanks, Smith http://spaces.msn.com/johnysmith

-----------------------------------------------------------

To stop getting this e-mail, or change how often it arrives, go to your E-mail 
Settings.
http://groups.msn.com/bdotnet/_emailsettings.msnw

Need help? If you've forgotten your password, please go to Passport Member 
Services.
http://groups.msn.com/_passportredir.msnw?ppmprop=help

For other questions or feedback, go to our Contact Us page.
http://groups.msn.com/contact

If you do not want to receive future e-mail from this MSN group, or if you 
received this message by mistake, please click the "Remove" link below. On the 
pre-addressed e-mail message that opens, simply click "Send". Your e-mail 
address will be deleted from this group's mailing list.
mailto:[EMAIL PROTECTED]

Reply via email to