自定义组合框,将绘制的图像导入数据网格视图

时间:2012-07-18 18:55:52

标签: c# .net winforms datagridview combobox

我是这个自定义datagridview列机制的新手。我想在datagridview中有一个组合框,允许用户选择不同的线条样式(使用DashStyle)。我发现的教程要么不是组合框,要么不使用绘图。

我已经可以通过使用代码here

覆盖OnDrawItem()来创建一个可用的自定义独立ComboBox

但我在制作自定义datagridview组合框列时遇到问题。

  1. 我希望comboboxcell的值返回DashStyle。
  2. 我也无法在表单加载时显示绘制的项目。将默认启动值设置为Dashstyle.Solid在组合框中写入“Solid”。当我点击它时会触发绘图项......
  3. 这是我到目前为止的代码,基于网络上的其他示例:

    public class CustomComboBoxColumn : DataGridViewComboBoxColumn
    {
      public CustomComboBoxColumn()
      {
        CustomComboBoxCell cbc = new CustomComboBoxCell();
        this.CellTemplate = cbc;
      }
    }
    
    public class CustomComboBoxCell : DataGridViewComboBoxCell
    {
      public CustomComboBoxCell()
      : base() { }
    
      public override void InitializeEditingControl(int rowIndex, object initialFormattedValue, DataGridViewCellStyle dataGridViewCellStyle)
      {
        base.InitializeEditingControl(rowIndex, initialFormattedValue, dataGridViewCellStyle);
    
        var ctl = DataGridView.EditingControl as CustomComboBoxControl;
    
        if (this.Value == null)
          ctl.SelectedIndex = 0;
      }
    
      public override Type EditType
      {
        get { return typeof(CustomComboBoxControl); }
      }
    
      public override Type ValueType
      {
        get { return typeof(DashStyle); }
      }
    
      public override object DefaultNewRowValue
      {
        get { return DashStyle.Solid; }
      }
    
    }
    
    
    public class CustomComboBoxControl : MyComboBox, IDataGridViewEditingControl
    {
      private int index_ = 0;
      private DataGridView dataGridView_ = null;
      private bool valueChanged_ = false;
    
      public CustomComboBoxControl() : base()
      {
        this.SelectedIndexChanged += new EventHandler(ComboBoxControl_SelectedIndexChanged);
        this.DrawMode = DrawMode.OwnerDrawVariable;
        this.DropDownStyle = ComboBoxStyle.DropDownList;
      }
    
    
      public void ComboBoxControl_SelectedIndexChanged(object sender, EventArgs e)
      {
        NotifyDataGridViewOfValueChange();
      }
    
    
      protected virtual void NotifyDataGridViewOfValueChange()
      {
        this.valueChanged_ = true;
        if (this.dataGridView_ != null)
        {
          this.dataGridView_.NotifyCurrentCellDirty(true);
        }
      }
    
      public void ApplyCellStyleToEditingControl(DataGridViewCellStyle dataGridViewCellStyle) {      }
    
      public DataGridView EditingControlDataGridView
      {
        get { return dataGridView_; }
        set { dataGridView_ = value; }
      }
    
      public object EditingControlFormattedValue
      {
        get { return base.SelectedValue; }
        set { base.SelectedValue = value; NotifyDataGridViewOfValueChange(); }
      }
    
      public int EditingControlRowIndex
      {
        get { return index_; }
        set { index_ = value; }
      }
    
      public bool EditingControlValueChanged
      {
        get { return valueChanged_; }
        set { valueChanged_ = value; }
      }
    
      public bool EditingControlWantsInputKey(Keys keyData, bool dataGridViewWantsInputKey)
      {
        if (keyData == Keys.Return)
          return true;
        switch (keyData & Keys.KeyCode)
        {
          case Keys.Up:
          case Keys.Down:
            return true;
          default:
            return false;
        }
      }
    
      public Cursor EditingPanelCursor
      {
        get { return base.Cursor; }
      }
    
      public object GetEditingControlFormattedValue(DataGridViewDataErrorContexts context)
      {
        var val = EditingControlFormattedValue;
        if (val == null)
          val = DashStyle.Solid;
        return val.ToString();
      }
    
      public void PrepareEditingControlForEdit(bool selectAll) { }
    
      public bool RepositionEditingControlOnValueChange
      {
        get { return false; }
      }
    
    }
    

    我感谢任何关于我做错了什么以及它如何运作的信息......

1 个答案:

答案 0 :(得分:0)

创建一个方法,该方法将字符串“solid”并返回DashStyle.Solid

private DashStyle GetDashStyle(string style){
  switch(style)
   {
        case "Solid":
         return DashStyle.Solid;
   }
}