2015-02-23 2 views
0

Я нахожусь в проекте, где базовый элемент управления представляет собой DatagridView, в нем отображаются количества производственных величин, каждая строка - это бах на производственном процессе, и каждый столбец является типом продукта в Баш.Добавление свойств к одному DatagridViewCell

У каждого Bash есть время для завершения процесса, когда время заканчивается, ячейка в строке должна быть окрашена, тогда у пользователя есть возможность добавить больше времени, если это необходимо для каждого отдельного продукта.

Так что мое предложение было добавление к каждому объекту Cell два свойства

  1. Состояние продукта Баша (INT).
  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, чтобы получить информацию, что мне нужно знать, как будет colorated клетка?

Спасибо за помощь

ответ

1

Почему вы не используете тег свойства, каждые строки должны хранение информацию партии, чем вы можете получить легко

Por Que не USAS ла Propiedad Tag дия Tiene Кады подряда para almacenar la informacion de cada registro y asi poder recuperarla facilmente.

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


//===>Llenar la informacion de cada row con la informacion adicional 
//===>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 
} 

//===>Para recuperar la informacion del batch solo tendrias que hacer esto. 

/===> Если вы хотите получить batchInfo из свойства строки тега вам нужно сделать это как таким образом

// ===> Вы не можете присвоить значение непосредственно потому что свойство тега является объектом, поэтому вам нужно сделать такой бросок ниже BatchInfo SelectedBatchInfo = (BatchInfo) miDataGrid.SelectedRows (0).тег;

//==>y para colorear alguna celda del grid. 
//==>Ans 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; 
+0

это попытка в первом, но я использовал ИНТ [устройство], но я трудно, когда установить свойство, необходимое для извлечения всего массива и сохранить его в новый экземпляр, где хранилось свойства по индексу, а затем устанавливаюсь Арканзас Я возвращаюсь к тегу. Но я чувствовал, что может быть более естественным способом сделать получение его в качестве крема клетки собственности –

+0

просто реализовать ваше предложение, я думаю, что он работал очень хорошо, лучше, чем ожидались, я использовал бы структуру, и это было удобно, чтобы извлечь и сохранить свойства и спасибо, спасибо, добавьте столько, сколько пожелаете. Ответ –

+0

в Инглесе поможет много пользователей. Это очень бесполезно для неанглийских ораторов, которые посещают этот вопрос. Смотрите этот [мета] (http://meta.stackoverflow.com/questions/262014/how-to-deal-with-non-english-posts) пост для обсуждения – Junaith

0
extendistes

Если DataGrid класса почему бы не добавить свойства больше как

Если Вы уже продлили DataGrid класс, почему вы не просто добавить новое свойство к ней, как это

BatchInfo GetSelectedBatchInfo{ 
    get{ 
     if(this.SelectedRows.Count > 0){ 
      return (BatchInfo)this.SelectedRows(0).Tag; 
     }else{ 
      return null; 
     } 
    } 
} 
Смежные вопросы