2010-07-13 1 views
3

У меня есть переменная, которую я хотел бы отобразить в одной ячейке DataGridView.Значок дисплея и строка внутри ячейки в DataGridView

Icon stockIcon; Int stockStatus;

Я уже посмотрел на http://msdn.microsoft.com/en-us/library/7tas5c80.aspx Но я думаю, что его путь к сложному и не показывает, как отображать переменные в одной ячейке.

Мне не нужно редактировать, отображать только две переменные.

Может ли кто-нибудь предоставить мне небольшой пример?

Я работаю в C# 4.0 и сво System.Windows.Forms.DataGridView

+0

Вы уверены, что это была одна ячейка? Почему они не могут находиться в двух соседних столбцах? – rotard

+0

Ну, это может быть в двух ячейках, но возможно ли делать ячейки. Поскольку мне нужен только один заголовок столбца. "Акции" – gulbaek

ответ

4

Вот мое собственное решение. Просто установите тип столбца в LagerStatusColumn, и он выполнит эту работу.

public class LagerStatusColumn : DataGridViewColumn 
{ 
    public LagerStatusColumn() 
    { 
     CellTemplate = 
      new LagerStatusCell(); 
     ReadOnly = true; 
    } 
} 
public class LagerStatusCell : DataGridViewTextBoxCell 
{ 
    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) 
    { 
     base.Paint(graphics, clipBounds, cellBounds, rowIndex, cellState, value, "", errorText, cellStyle, 
        advancedBorderStyle, paintParts); 

     var cellValue = Convert.IsDBNull(value) ? 0 : Convert.ToDecimal(value); 

     const int horizontaloffset = 2; 

     var parent = (LagerStatusColumn)this.OwningColumn; 

     var fnt = parent.InheritedStyle.Font; 

     var icon = Properties.Resources.lager; 
     if (cellValue == 0) 
      icon = Properties.Resources.rest; 
     else if (cellValue < 0) 
      icon = Properties.Resources.question_white; 

     const int vertoffset = 0; 
     graphics.DrawIcon(icon, cellBounds.X + horizontaloffset, 
      cellBounds.Y + vertoffset); 

     var cellText = formattedValue.ToString(); 
     var textSize = 
      graphics.MeasureString(cellText, fnt); 

     // Calculate the correct color: 
     var textColor = parent.InheritedStyle.ForeColor; 
     if ((cellState & 
      DataGridViewElementStates.Selected) == 
      DataGridViewElementStates.Selected) 
     { 
      textColor = parent.InheritedStyle. 
       SelectionForeColor; 
     } 

     // Draw the text: 
     using (var brush = new SolidBrush(textColor)) 
     { 
      graphics.DrawString(cellText, fnt, brush, 
           cellBounds.X + icon.Width + 2, 
           cellBounds.Y + 0); 
     } 
    } 
}