1.定义进度条列
class DataGridViewProgressColumn : DataGridViewImageColumn
{
public DataGridViewProgressColumn()
{
this.CellTemplate = new DataGridViewProgressCell();
}
}
class DataGridViewProgressCell : DataGridViewImageCell
{
//public UpdateProcessValue updateValue;
public object progressCellLock = new object();
static Image emptyImage;
static DataGridViewProgressCell()
{
emptyImage = new Bitmap(1, 1, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
}
public DataGridViewProgressCell()
{
this.ValueType = typeof(double);
}
public string ShowText { get; set; } //如果要显示独立的文字而不是百分比,设置此属性。
protected override object GetFormattedValue(object value,
int rowIndex, ref DataGridViewCellStyle cellStyle,
TypeConverter valueTypeConverter,
TypeConverter formattedValueTypeConverter,
DataGridViewDataErrorContexts context)
{
return emptyImage;
}
public new double Value
{
set
{
lock (progressCellLock)
{
try
{
base.Value = Math.Round(value, 2);
}
catch { }
}
}
get
{
return double.Parse(base.Value.ToString());
}
}
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)
{
if (value == null)
{
value = "0";
ShowText = "0%";
}
string tValue = value.ToString();
if (tValue == "") tValue = "0";
double progressVal;
try { progressVal = Convert.ToDouble(tValue); }
catch
{
progressVal = 0;
}
float percentage = ((float)progressVal / 100.0f);
Brush backColorBrush = new SolidBrush(cellStyle.BackColor);
Brush foreColorBrush = new SolidBrush(cellStyle.ForeColor);
lock (progressCellLock)
{
base.Paint(g, clipBounds, cellBounds,
rowIndex, cellState, value, formattedValue, errorText,
cellStyle, advancedBorderStyle, (paintParts & ~DataGridViewPaintParts.ContentForeground));
string DrawStringStr = progressVal.ToString() + "%";
if (ShowText != "")
{
DrawStringStr = ShowText;
}
if (percentage > 0.0)
{
//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.FillRectangle(new SolidBrush(Color.Green), cellBounds.X + 2, cellBounds.Y + 2, Convert.ToInt32((percentage * cellBounds.Width - 4)), cellBounds.Height - 4);
g.DrawString(DrawStringStr, cellStyle.Font, foreColorBrush, cellBounds.X + 30, cellBounds.Y + 5);
}
else
{
if (this.DataGridView.CurrentRow.Index == rowIndex)
g.DrawString(DrawStringStr, cellStyle.Font, new SolidBrush(cellStyle.SelectionForeColor), cellBounds.X + 30, cellBounds.Y + 5);
else
g.DrawString(DrawStringStr, cellStyle.Font, foreColorBrush, cellBounds.X + 30, cellBounds.Y + 5);
}
}
}
}
2.使用
Progress = new DataGridViewProgressColumn();
分享到:
相关推荐
DataGridView添加进度条,DataGridView添加进度条
DataGridView的进度条ProgressBar
DataGridView进度条 DataGridView进度条 DataGridView进度条 DataGridView进度条 DataGridView进度条
DataGridView显示进度条 DataGridView显示进度条 DataGridView显示进度条
DataGridView显示进度条.rar
C#中DataGridView添加进度条一列
DataGridView进度条
1、实现在DataGridView控件中添加进度条列,以进度条及白分比的方式在单元格中显示数据。 2、实现在进度条中显示进度百分比文本。
C# Winfrom中使用 DataGridView 控件中实现类似进度条显示列——添加列时可添加进度条列显示列,进度条列的进度显示可根据自身喜好进行自定义设置即可。
C#datagridview的拓展控件类,每行都可以加进度条
利用C#进行文件下载,在datagridview中进行操作,并且datagridview中可以添加进度条显示下载进度
主要实现一个带有进度条的DataGridView,Codeproject上的好东西。
Excel导入DataGridView和SQL_带进度条, 测试可用,使用Microsoft.Office.Interop.Excel导出
此进度条 用户可以自定义设置前景和背景的样式(纯色,渐变,图案,图片),可以设置颜色,透明度(图片无法设置透明度)。进度有Value和MaxValue控制。具有事件ValueChange和Finish。
DataGridView的列,列头具有筛选功能。 如果列是字符型的列头下拉控件中出现的是DataGridView中的此列不重复的内容。如果是数字类型的,下拉中是(All)、=、、>=、、>、<。选择后讲出现数字输入框。
C# winform datagridview 动态列值计算
datagridview 要进行数据绑定后才能对相应的列重新进行赋值
DataGridView 实现一列单元格 显示多操作方式 DataGridView 实现一列单元格 显示多操作方式
添加到工程中,编译后,直接选择原datagridview类内相应column即可看到进度条的类型,直接设置其值即可
dataGridView表头合并列: 实现将dataGridView表头的某个列再分为多个小列.