【转载】
步骤:
1、在项目新建类文件,并装入附件的源码,编译一次。
2、添加datagridview,属性-杂项-colums-选定某一列-改变columntype即可。
【DataGridViewProgressColumn】
//---------------------------------------------------------------------
//THIS CODE AND INFORMATION ARE PROVIDED AS IS WITHOUT WARRANTY OF ANY
//KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
//IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
//PARTICULAR PURPOSE.
//---------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Drawing;
using System.ComponentModel;
namespace Test


{
public class DataGridViewProgressColumn : DataGridViewImageColumn

{
public DataGridViewProgressColumn()

{
CellTemplate = new DataGridViewProgressCell();
}
}

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)

{
if (value==null)

{
throw new ArgumentNullException();
}
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);
}
}
}
}

【CalendarColumn】
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Drawing;
using System.ComponentModel;

namespace Test


{
public class CalendarColumn : DataGridViewColumn

{
private bool showUpDown = true;
public bool ShowUpDown

{
get

{
return showUpDown;
}
set

{
showUpDown = value;
}
}
public CalendarColumn()
: base(new CalendarCell())

{
}
public override DataGridViewCell CellTemplate

{
get

{
return base.CellTemplate;
}
set

{
if (value != null &&
!value.GetType().IsAssignableFrom(typeof(CalendarCell)))

{
throw new InvalidCastException("Must be a CalendarCell");
}
base.CellTemplate = value;
}
}
private void InitializeComponent()

{
}
}

public class CalendarCell : DataGridViewTextBoxCell

{
public CalendarCell()
: base()

{
}
public override void InitializeEditingControl(int rowIndex, object
initialFormattedValue, DataGridViewCellStyle dataGridViewCellStyle)

{
base.InitializeEditingControl(rowIndex, initialFormattedValue, dataGridViewCellStyle);
CalendarEditingControl ctl =
DataGridView.EditingControl as CalendarEditingControl;
ctl.Text = this.Value.ToString();
}
public override Type EditType

{
get

{
return typeof(CalendarEditingControl);
}
}
public override Type ValueType

{
get

{
return typeof(DateTime);
}
}
public override object DefaultNewRowValue

{
get

{
return DateTime.Now;
}
}
}

class CalendarEditingControl : DateTimePicker, IDataGridViewEditingControl

{
DataGridView dataGridView;
private bool valueChanged = false;
int rowIndex;
public CalendarEditingControl()

{
}
public object EditingControlFormattedValue

{
get

{
return this.Value.ToLongDateString();
}
set

{
String newValue = value as String;
if (newValue != null)

{
this.Value = DateTime.Parse(newValue);
}
}
}
public object GetEditingControlFormattedValue(
DataGridViewDataErrorContexts context)

{
return EditingControlFormattedValue;
}
public void ApplyCellStyleToEditingControl(
DataGridViewCellStyle dataGridViewCellStyle)

{
this.Font = dataGridViewCellStyle.Font;
this.CalendarForeColor = dataGridViewCellStyle.ForeColor;
this.CalendarMonthBackground = dataGridViewCellStyle.BackColor;
}
public int EditingControlRowIndex

{
get

{
return rowIndex;
}
set

{
rowIndex = value;
}
}
public bool EditingControlWantsInputKey(
Keys key, bool dataGridViewWantsInputKey)

{
switch (key & Keys.KeyCode)

{
case Keys.Left:
case Keys.Up:
case Keys.Down:
case Keys.Right:
case Keys.Home:
case Keys.End:
case Keys.PageDown:
case Keys.PageUp:
return true;
default:
return false;
}
}
public void PrepareEditingControlForEdit(bool selectAll)

{
}
public bool RepositionEditingControlOnValueChange

{
get

{
return false;
}
}
public DataGridView EditingControlDataGridView

{
get

{
return dataGridView;
}
set

{
dataGridView = value;
}
}
public bool EditingControlValueChanged

{
get

{
return valueChanged;
}
set

{
valueChanged = value;
}
}
public Cursor EditingPanelCursor

{
get

{
return base.Cursor;
}
}
protected override void OnValueChanged(EventArgs eventargs)

{
valueChanged = true;
this.EditingControlDataGridView.NotifyCurrentCellDirty(true);
base.OnValueChanged(eventargs);
}
}

}

补充:
在ProgressBar的paint函数中,要对value和progressval附加处理,
if (value==null)
{
value = (object)0;
}
int progressVal;
try
{
progressVal = Convert.ToInt16(value);
}
catch
{
progressVal = 0;
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步