向单个 DatagridViewCell 添加属性
Adding properties to single DatagridViewCell
我在一个项目中,基本控件是一个 DatagridView,其中显示了生产数量的数字,希望每一行都是生产过程的 bach,每一列都是 [=44 中的一种产品=].
每个 Bash 都有一个时间来完成这个过程,当时间结束时,行中的单元格必须是彩色的,然后用户可以根据需要添加更多时间到每个产品。
所以我的建议是向每个 Cell 对象添加两个属性
- bash 产品的状态(整数)。
- 以分钟为单位的延长时间(默认值为 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;
}
}
}
我在一个项目中,基本控件是一个 DatagridView,其中显示了生产数量的数字,希望每一行都是生产过程的 bach,每一列都是 [=44 中的一种产品=].
每个 Bash 都有一个时间来完成这个过程,当时间结束时,行中的单元格必须是彩色的,然后用户可以根据需要添加更多时间到每个产品。
所以我的建议是向每个 Cell 对象添加两个属性
- bash 产品的状态(整数)。
- 以分钟为单位的延长时间(默认值为 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;
}
}
}