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`列类型和使用进度条控件(如`ProgressBar`)的知识。以下将详细讲解如何实现这个功能...
本文将详细介绍如何在C#中的`DataGridView`控件中添加进度条列。 首先,`DataGridView`控件本身并不直接支持进度条列。为了实现这一功能,我们需要自定义一个用户控件(User Control)来模拟进度条,并将其作为`...
57. DataGridView中显示进度条(ProgressBar) 58. DataGridView中添加MaskedTextBox DataGridView控件用法合集(十二) 59. DataGridView中Enter键按下焦点移至旁边的单元格 60. DataGridView行集合化(Group)
3. 遍历`DataGridView`的行和列,将数据写入到Excel工作表的相应单元格中。可以使用`Range.SetValues`方法一次性设置多个单元格的值。 4. 保存Excel文件,使用`Workbook.SaveAs`方法,传入文件路径和文件格式。 5. ...
- **进度条**:对于大量数据的导出,可考虑增加进度条显示导出进度。 - **日志记录**:记录导出过程中的关键信息,便于后期问题排查。 #### 3. 总结 以上代码提供了一种简洁有效的方式,将`DataGridView`中的数据...
在特定列的单元格中根据值显示不同的图片,可以增加界面的直观性和信息量。 57. DataGridView中显示进度条(ProgressBar) 在单元格中展示进度条,用于表示长时间运行的任务的进度,提高用户等待时的体验。 58. ...
1. **进度条列**:XPTable控件允许你在表格的某一列中显示进度条,这对于呈现任务的完成度或资源的使用情况非常有用。你可以动态更新每个单元格的进度条,以便实时反映数据的变化。 2. **图片列**:在表格中添加...
这些值会随着时间增加,因此需要通过采样和差分计算得出瞬时使用率。 4. **动态网格显示**:`System.Windows.Forms.DataGridView`控件是C#中用于创建表格布局的工具,非常适合用来展示进程列表。我们可以创建一个...
- 创建Winform窗口,添加DataGridView控件,设置其AutoGenerateColumns属性为True以自动显示数据列。 - 添加页码和页大小的输入框,用于用户自定义分页参数。 - 添加导航按钮,如Button控件,分别标记为“上一页...
- **行和列操作**:支持增加、删除行;调整列宽、隐藏列等功能。 - **样式定制**:可以自定义单元格样式,如字体颜色、背景色等。 - **交互操作**:提供双击事件、选择事件等交互操作的支持。 - **数据编辑**:支持...
4. **数据网格视图(DataGridView)**:用于展示玩具的详细列表,包括多列数据,如ID、名称、价格、库存数量等。 5. **按钮(Button)**:用于执行特定操作,如添加、删除、修改玩具记录,或者查询、导出数据。 6. *...
- 可自定义列类型(如文本列、复选框列等)。 - 支持数据编辑、添加和删除操作。 - 提供灵活的数据呈现方式。 #### 二、BindingSource组件 - **定义**:`BindingSource`组件作为数据绑定的核心组件,它充当数据...
- 增减操作:通过上下按钮增加或减少数值。 ##### ListBox控件 - **定义与功能**:`ListBox`控件用于显示一个垂直滚动的项目列表。 - **主要特性**: - 列表显示:显示一个可滚动的项目列表。 - 多选支持:支持...
- **自定义列**:可以通过设置`DataGridViewColumn`的属性来自定义列的显示方式,例如隐藏某些列或更改单元格的格式。 - **排序与筛选**:支持对数据进行排序和筛选,使用户能够更容易地查找所需的信息。 - **编辑...
3. **StatusStrip控件**:通常位于窗口底部,显示应用程序的状态信息,如进度条、提示信息等。 - **特点**:提高用户体验;方便监控程序状态。 4. **ProgressBar控件**:用于显示操作的进度,帮助用户了解当前任务...
2.2.25 SelectedColumns属性——用户选定的列集合 178 2.2.26 SelectedRows属性——用户选定的行集合 179 2.2.27 SelectionBackColor属性——文本在选中时的颜色 180 2.2.28 SelectionColor属性——插入点的文本颜色...
9. **列表视图**: `lvw` - ListView 控件可以显示多列数据,常用于文件管理器等应用。 10. **掩码文本框**: `mtx` - MaskedTextBox 控件用于限制用户输入格式化的文本,如电话号码或日期。 11. **月份日历**: `cdr` ...
5. **1.10.5 ColumnsExtension for DataGrid(列扩展表格)**:增加了对数据表格列的扩展功能。 6. **1.10.6 EditableTree(可编辑树)**:可以编辑树形结构的组件。 7. **1.10.7 DataGridFilterRow(可过滤行的数据...
9. **lvw**: ListView - 列表视图,可以显示多列数据和图标。 10. **mtx**: MaskedTextBox - 格式化文本框,限制用户输入格式化的文本。 11. **cdr**: MonthCalendar - 月历控件,用户可选择日期。 12. **icn**: ...
9. **lvw ListView**:列表视图,支持多种视图模式(如列表、小图标、大图标等),可以包含复选框、图像和多列数据。 10. **mtx MaskedTextBox**:掩码文本框,用于输入符合特定格式的数据。 11. **cdr ...