C# 自定义DataGridView列-哪里出了问题?
我需要创建一个新的DataGridView列类型,它允许以下操作:C# 自定义DataGridView列-哪里出了问题?,c#,datagridview,C#,Datagridview,我需要创建一个新的DataGridView列类型,它允许以下操作: 多个图像的小缩略图,如果需要可以拆分为多行 是 在每个缩略图上悬停或单击的功能,将显示完整大小的图像 将缩略图从一行拖动到另一行的功能 一步一个脚印,我试图让它至少能正确显示图像。以下是我的专栏代码: public class DataGridViewPODColumn : DataGridViewColumn { public DataGridViewPODColumn() { this.
- 多个图像的小缩略图,如果需要可以拆分为多行 是
- 在每个缩略图上悬停或单击的功能,将显示完整大小的图像
- 将缩略图从一行拖动到另一行的功能
public class DataGridViewPODColumn : DataGridViewColumn
{
public DataGridViewPODColumn()
{
this.CellTemplate = new DataGridViewPODCell();
}
public override object Clone()
{
return base.Clone()
}
}
这是该单元的代码:
public class DataGridViewPODCell : DataGridViewTextBoxCell
{
private static Type defaultValueType = typeof(List<PODImage>);
private int _XCoordinate = 0;
private int _YCoordinate = 0;
public int XCoordinate { get { return _XCoordinate; } set { _XCoordinate = value; } }
public int YCoordinate { get { return _YCoordinate; } set { _YCoordinate = value; } }
public override Type ValueType
{
get
{
Type valueType = base.ValueType;
if (valueType != null) return valueType;
return defaultValueType;
}
}
protected override void Paint(System.Drawing.Graphics graphics, 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 (this.DataGridView == null) return;
base.Paint(graphics, clipBounds, cellBounds, rowIndex, cellState, value, formattedValue, errorText, cellStyle, advancedBorderStyle, paintParts);
int counter = 0;
foreach (PODImage podVal in (List<PODImage>)value)
{
GraphicsContainer container = graphics.BeginContainer();
graphics.SetClip(cellBounds);
Point objPoint = new Point(cellBounds.Location.X + XCoordinate, cellBounds.Location.Y + YCoordinate);
graphics.DrawImage(podVal.POD, objPoint.X, objPoint.Y, 20, 40);
XCoordinate += 22;
counter++;
if (counter % 3 == 0)
{
YCoordinate += 42;
XCoordinate = 0;
}
}
}
公共类DataGridViewPODCell:DataGridViewTextBoxCell
{
私有静态类型defaultValueType=typeof(列表);
私有int XCoordinate=0;
私有整数协调=0;
public int XCoordinate{get{return{uxcoordinate;}set{{uxcoordinate=value;}}
公共int-YCoordinate{get{return}u-YCoordinate;}set{u-YCoordinate=value;}
公共重写类型ValueType
{
收到
{
类型valueType=base.valueType;
如果(valueType!=null)返回valueType;
返回defaultValueType;
}
}
保护覆盖无效涂料(System.Drawing.Graphics Graphics、System.Drawing.Rectangle剪贴簿、System.Drawing.Rectangle cellBounds、int rowIndex、DataGridViewElementState cellState、对象值、对象格式化值、字符串错误文本、DataGridViewCellStyle cellStyle、DataGridViewAdvancedBorderStyle advancedBorderStyle、DataGridViewPaintParts paintParts)
{
if(this.DataGridView==null)返回;
绘制(图形、剪贴簿、单元格边框、行索引、单元格状态、值、格式化值、错误文本、单元格样式、高级边框样式、绘制部件);
int计数器=0;
foreach(PODImage podVal in(列表)值)
{
GraphicsContainer容器=graphics.BeginContainer();
图形.SetClip(cellBounds);
点objPoint=新点(cellBounds.Location.X+XCoordinate,cellBounds.Location.Y+YCoordinate);
graphics.DrawImage(podVal.POD,objPoint.X,objPoint.Y,20,40);
XCoordinate+=22;
计数器++;
如果(计数器%3==0)
{
YCoordinate+=42;
XCoordinate=0;
}
}
}
但是,我对此有一些主要问题:
如果有人能给我指出正确的方向,我将不胜感激。在接下来的几天里,当我有一分钟的空闲时间时,我会仔细考虑你的问题,但我想我会建议,如果可能的话,使用WPF——你想用WPF网格做的事情非常简单。