📄 cdatagridviewcomboboxcell.cs
字号:
using System;
using System.Data;
using System.Text;
using System.Windows.Forms;
using System.Collections;
using System.Collections.Generic;
namespace QueryTool_V1
{
public class CDataGridViewComboBoxColumn : DataGridViewColumn
{
public ArrayList dummy = new ArrayList();
public CDataGridViewComboBoxColumn()
: base(new CDataGridViewComboBoxCell())
{
}
public override DataGridViewCell CellTemplate
{
get
{
return base.CellTemplate;
}
set
{
// Ensure that the cell used for the template is a ComboBoxCell.
if (value != null &&
!value.GetType().IsAssignableFrom(typeof(CDataGridViewComboBoxCell)))
{
throw new InvalidCastException("Must be a ComboBoxCell");
}
base.CellTemplate = value;
}
}
}
public class CDataGridViewComboBoxCell : DataGridViewTextBoxCell
{
public class ObjectCollection : IList, ICollection, IEnumerable
{
private ArrayList list;
private CDataGridViewComboBoxCell owner;
public ObjectCollection(CDataGridViewComboBoxCell owner)
{
this.owner = owner;
list = new ArrayList();
}
public virtual int Count
{
get { return list.Count; }
}
public virtual bool IsFixedSize
{
get { return list.IsFixedSize; }
}
public virtual bool IsReadOnly
{
get { return list.IsReadOnly; }
}
public virtual bool IsSynchronized
{
get { return list.IsSynchronized; }
}
public virtual object SyncRoot
{
get { return list.SyncRoot; }
}
public virtual object this[int index]
{
get { return list[index]; }
set { list[index] = value; }
}
public int Add(object item)
{
owner.ctl.Items.Add(item);
return list.Add(item);
}
public void AddRange(ObjectCollection value)
{
list.AddRange(value.list);
}
public void AddRange(object[] items)
{
owner.ctl.Items.AddRange(items);
list.AddRange(items);
}
//public sealed void Clear () {
public void Clear()
{
owner.ctl.Items.Clear();
list.Clear();
}
//public sealed bool Contains (object value) {
public bool Contains(object value)
{
return list.Contains(value);
}
public void CopyTo(Array destination, int arrayIndex)
{
list.CopyTo(destination, arrayIndex);
}
//public sealed IEnumerator GetEnumerator () {
public IEnumerator GetEnumerator()
{
return list.GetEnumerator();
}
//public sealed int IndexOf (object value) {
public int IndexOf(object value)
{
return list.IndexOf(value);
}
//public sealed void Insert (int index, object item) {
public void Insert(int index, object item)
{
list.Insert(index, item);
}
//public sealed void Remove (object value) {
public void Remove(object value)
{
list.Remove(value);
}
//public sealed void RemoveAt (int index) {
public void RemoveAt(int index)
{
list.RemoveAt(index);
}
}
public CDataGridViewComboBoxEditingControl ctl;
ObjectCollection items;
public CDataGridViewComboBoxCell()
: base()
{
items = new ObjectCollection(this);
}
public virtual ObjectCollection Items
{
get { return items; }
}
public override void InitializeEditingControl(int rowIndex, object
initialFormattedValue, DataGridViewCellStyle dataGridViewCellStyle)
{
// Set the value of the editing control to the current cell value.
base.InitializeEditingControl(rowIndex, initialFormattedValue,
dataGridViewCellStyle);
ctl =
DataGridView.EditingControl as CDataGridViewComboBoxEditingControl;
ctl.Items.Clear();
ctl.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
ctl.AutoCompleteSource = AutoCompleteSource.ListItems;
ctl.TextChanged += new EventHandler(ctl_TextChanged);
ctl.Text = (string)this.Value;
}
private void ctl_TextChanged(object sender, EventArgs e)
{
if (!ctl.Text.Equals("") || !ctl.Text.Equals(string.Empty))
{
ctl.Text = ctl.Text;
ctl.EditingControlDataGridView.NotifyCurrentCellDirty(true);
ctl.EditingControlValueChanged = true;
}
}
public override Type EditType
{
get
{
// Return the type of the editing contol that ComboBoxCell uses.
return typeof(CDataGridViewComboBoxEditingControl);
}
}
public override Type ValueType
{
get
{
// Return the type of the value that ComboBoxCell contains.
return typeof(string);
}
}
public override object DefaultNewRowValue
{
get
{
// Use the current date and time as the default value.
return string.Empty;
}
}
}
public class CDataGridViewComboBoxEditingControl : ComboBox, IDataGridViewEditingControl
{
DataGridView dataGridView;
private bool valueChanged = false;
int rowIndex;
public CDataGridViewComboBoxEditingControl()
{
}
// Implements the IDataGridViewEditingControl.EditingControlFormattedValue
// property.
public object EditingControlFormattedValue
{
get
{
return this.Text;
}
set
{
if (value is String)
{
this.Text = value.ToString();
}
}
}
// Implements the
// IDataGridViewEditingControl.GetEditingControlFormattedValue method.
public object GetEditingControlFormattedValue(
DataGridViewDataErrorContexts context)
{
return EditingControlFormattedValue;
}
// Implements the
// IDataGridViewEditingControl.ApplyCellStyleToEditingControl method.
public void ApplyCellStyleToEditingControl(
DataGridViewCellStyle dataGridViewCellStyle)
{
this.Font = dataGridViewCellStyle.Font;
}
// Implements the IDataGridViewEditingControl.EditingControlRowIndex
// property.
public int EditingControlRowIndex
{
get
{
return rowIndex;
}
set
{
rowIndex = value;
}
}
// Implements the IDataGridViewEditingControl.EditingControlWantsInputKey
// method.
public bool EditingControlWantsInputKey(
Keys key, bool dataGridViewWantsInputKey)
{
// Let the DateTimePicker handle the keys listed.
switch (key & Keys.KeyCode)
{
case Keys.Left:
case Keys.Up:
case Keys.Down:
case Keys.Right:
case Keys.Home:
case Keys.End:
case Keys.PageDown:
case Keys.PageUp:
return true;
default:
return !dataGridViewWantsInputKey;
}
}
// Implements the IDataGridViewEditingControl.PrepareEditingControlForEdit
// method.
public void PrepareEditingControlForEdit(bool selectAll)
{
// No preparation needs to be done.
}
// Implements the IDataGridViewEditingControl
// .RepositionEditingControlOnValueChange property.
public bool RepositionEditingControlOnValueChange
{
get
{
return false;
}
}
// Implements the IDataGridViewEditingControl
// .EditingControlDataGridView property.
public DataGridView EditingControlDataGridView
{
get
{
return dataGridView;
}
set
{
dataGridView = value;
}
}
// Implements the IDataGridViewEditingControl
// .EditingControlValueChanged property.
public bool EditingControlValueChanged
{
get
{
return valueChanged;
}
set
{
valueChanged = value;
}
}
// Implements the IDataGridViewEditingControl
// .EditingPanelCursor property.
public Cursor EditingPanelCursor
{
get
{
return base.Cursor;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -