0
我對這個自定義datagridview列機制新不熟悉。我想要在datagridview中有一個組合框,這將允許用戶選擇不同的線條樣式(使用DashStyle)。我發現的教程不是用於組合框或不使用繪圖。自定義組合框與繪製圖像到datagrid視圖
我已經可以通過重寫的OnDrawItem()做一個工作的定製獨立的組合框,使用代碼here
但我有麻煩一個自定義的datagridview組合框列。
- 我想讓comboboxcell的值返回一個DashStyle。
- 我也遇到了在窗體加載時顯示繪製項的問題。將默認啓動值設置爲Dashstyle.Solid將「Solid」寫入組合框。當我點擊它時,會觸發平局項...
這裏是我的代碼到目前爲止,基於網絡上的其他例子:
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; }
}
}
我欣賞的任何信息什麼我做錯了和它是如何工作...