向单个 DatagridViewCell 添加属性

Adding properties to single DatagridViewCell

我在一个项目中,基本控件是一个 DatagridView,其中显示了生产数量的数字,希望每一行都是生产过程的 bach,每一列都是 [=44 中的一种产品=].

每个 Bash 都有一个时间来完成这个过程,当时间结束时,行中的单元格必须是彩色的,然后用户可以根据需要添加更多时间到每个产品。

所以我的建议是向每个 Cell 对象添加两个属性

  1. bash 产品的状态(整数)。
  2. 以分钟为单位的延长时间(默认值为 int 0)。

所以我用这种方式创建了自己的 DataGridViewCell

public class PedidosCell : DataGridViewCell
{
    private int _estado;
    private int _tiempo;

    public int Estado
    {
        get { return _estado; }
        set { _estado = value; }
    }

    public int TiempoExtra
    {
        get { return _tiempo; }
        set { _tiempo = value; }
    }
}

之后我创建了使用 PedidosCell 的列

public class PedidosColumn : DataGridViewColumn
{
    public PedidosColumn()
        : base(new PedidosCell())
    {
    }

    public override DataGridViewCell CellTemplate
    {
        get
        {
            return base.CellTemplate;
        }
        set
        {
            // Ensure that the cell used for the template is a PedidosCell. 
            if (value != null &&
                !value.GetType().IsAssignableFrom(typeof(PedidosCell)))
            {
                throw new InvalidCastException("Must be a PedidosCell");
            }
            base.CellTemplate = value;
        }
    }

问题从这里开始,因为如果我调用构造函数

PedidosColumn col = new PedidosColumn();

属性

col.CellTemplate.TiempoExtra

不存在;并且很明显,因为覆盖程序 CellTemplate 正在返回原始 CellTemplate

但是我该怎么做(如果可能的话)来制作一个简单的 dgView.Row[0].Cell[2].TiempoExtra 或者 dgView.Row[0].Cell[2].Estado 获取我需要知道单元格将如何着色的信息?

感谢您的帮助

为什么不使用每行都必须存储的 属性 标记 批次信息,您可以轻松检索

structure BatchInfo{
//===>Informacion de tu batch aqui.
//===>Add here fields of information of your batch
...
}

//===>You can fill each datagrid row tag property with the batch info like this    
foreach(DataGridViewRow iRow int miDataGrid.Rows){
  iRow.Tag = new BatchInfo("BatchName");//===>Create a new object of your structure
}

/===>If you want to retrieve the batchInfo from the row tag property you need to do it like this way

//===>You can not assign the the value directly because tag property is an object, so you need to do a cast like this way below
BatchInfo SelectedBatchInfo = (BatchInfo)miDataGrid.SelectedRows(0).Tag;

//==>And if you want add color to specific cell do it this way
miDataGrid.SelectedRow(0).Cell("MiColumna").style.BackColor = Color.Navy;
miDataGrid.SelectedRow(0).Cell("MiColumna").style.Forecolor = Color.WhiteSmoke;

如果您已经扩展了 DataGrid Class 为什么不像这样向其中添加一个新的 属性

BatchInfo GetSelectedBatchInfo{
  get{
         if(this.SelectedRows.Count > 0){
            return (BatchInfo)this.SelectedRows(0).Tag;
         }else{
            return null;
        }
  }
}