using System; using System.Windows; using System.Windows.Forms; using System.Collections.Generic; using System.Text; using System.Data;namespace BaseItems { class CellCommSelEditWS:TbxCommWS, IDataGridViewEditingControl { DataGridView dataGridView; bool valueChanged = false; int rowIndex; public CellCommSelEditWS() { //base.EditMode = false; base.BorderStyle = BorderStyle.None; base.textbox.BorderStyle = BorderStyle.None; } string _commselid = ""; public int EditingControlRowIndex { get { return rowIndex; } set { rowIndex = value; } } protected override void OnTextChanged(EventArgs e) { base.OnTextChanged(e); valueChanged = true; this.EditingControlDataGridView.NotifyCurrentCellDirty(true); }
public bool EditingControlValueChanged { set { valueChanged = value; } get { return valueChanged; } } public object EditingControlFormattedValue { get { return this.Text.ToString(); } set { this.Text = value.ToString(); } } // Implements the // IDataGridViewEditingControl.GetEditingControlFormattedValue method. public object GetEditingControlFormattedValue(DataGridViewDataErrorContexts context) { return EditingControlFormattedValue; } // Implements the // IDataGridViewEditingControl.ApplyCellStyleToEditingControl method. public void PrepareEditingControlForEdit(bool selectAll) { //i have something to do with prepare //initialize commsel; //set the value and without uniquecheck } public void ApplyCellStyleToEditingControl(DataGridViewCellStyle dataGridViewCellStyle) { this.Font = dataGridViewCellStyle.Font; } 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 false; } } public bool RepositionEditingControlOnValueChange { get { return true; } } public DataGridView EditingControlDataGridView { get { return dataGridView; } set { dataGridView = value; } } public Cursor EditingPanelCursor { get { return base.Cursor; } } } public class CellCommSelWS : DataGridViewTextBoxCell { public CellCommSelWS() : base() { } CellCommSelEditWS ctl; public override void InitializeEditingControl(int rowIndex, object initialFormattedValue, DataGridViewCellStyle dataGridViewCellStyle) { base.InitializeEditingControl(rowIndex, initialFormattedValue, dataGridViewCellStyle); ctl = DataGridView.EditingControl as CellCommSelEditWS; ctl.Text = this.Value.ToString(); //ctl.ConnString = ((commselColumn)base.OwningColumn).ConnString; string tid = ""; //DataRowView drv = (DataRowView)base.OwningRow.DataBoundItem; tid = ((GDColumnWS)base.OwningColumn).CommonSelectionID; //if (tid != "") //{ // tid = drv[((GDColumnWS)base.OwningColumn).CommonSelectionID].ToString(); //} //else //{ // tid = ""; //} //ctl.ConnString = _cn; ctl.CommEditID = tid; } public void setSection(string id) { ctl.CommEditID= id; } public override Type EditType { get { return typeof(CellCommSelEditWS); } } public override Type ValueType { get { return typeof(string); } } public override object DefaultNewRowValue { get { return ""; } } } public class GDColumnWS : DataGridViewTextBoxColumn { public GDColumnWS() : base() { } string _ftid = ""; public string CommonSelectionID { set { _ftid = value; } get { return _ftid; } } CellCommSelWS _celledit; public override DataGridViewCell CellTemplate { get { return _celledit; } set { if (value != null && !value.GetType().IsAssignableFrom(typeof(CellCommSelWS))) { throw new InvalidCastException("Must be a Common Selection Cell"); } _celledit = (CellCommSelWS)value; } } }}
TbxCommWS是一个TextBox和Button组合成的自定义控件
void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) { if (!this.IsKeyPressHandled && this.dataGridView1.CurrentCell.ColumnIndex == this.dataGridView1.Columns["MaskColumn"].Index) { TextBox tb = e.Control as TextBox; tb.KeyPress += new KeyPressEventHandler(tb_KeyPress); this.IsKeyPressHandled = true; } } void tb_KeyPress(object sender, KeyPressEventArgs e) { if (this.dataGridView1.CurrentCell.ColumnIndex == this.dataGridView1.Columns["MaskColumn"].Index) { // Prevent the key char to be input in the editing control e.Handled = true; // Set focus to the MaskedTextBox for editing. this.maskedTextBoxForEditing.Text = e.KeyChar.ToString(); this.maskedTextBoxForEditing.Focus(); } }
using System;
using System.Windows;
using System.Windows.Forms;
using System.Collections.Generic;
using System.Text;
using System.Data;namespace BaseItems
{
class CellCommSelEditWS:TbxCommWS, IDataGridViewEditingControl
{
DataGridView dataGridView;
bool valueChanged = false;
int rowIndex;
public CellCommSelEditWS()
{
//base.EditMode = false;
base.BorderStyle = BorderStyle.None;
base.textbox.BorderStyle = BorderStyle.None;
}
string _commselid = "";
public int EditingControlRowIndex
{
get { return rowIndex; }
set { rowIndex = value; }
}
protected override void OnTextChanged(EventArgs e)
{
base.OnTextChanged(e);
valueChanged = true;
this.EditingControlDataGridView.NotifyCurrentCellDirty(true);
}
public bool EditingControlValueChanged
{
set { valueChanged = value; }
get { return valueChanged; } }
public object EditingControlFormattedValue
{
get
{
return this.Text.ToString();
}
set
{
this.Text = value.ToString();
}
} // Implements the
// IDataGridViewEditingControl.GetEditingControlFormattedValue method.
public object GetEditingControlFormattedValue(DataGridViewDataErrorContexts context)
{
return EditingControlFormattedValue;
} // Implements the
// IDataGridViewEditingControl.ApplyCellStyleToEditingControl method.
public void PrepareEditingControlForEdit(bool selectAll)
{
//i have something to do with prepare
//initialize commsel;
//set the value and without uniquecheck
}
public void ApplyCellStyleToEditingControl(DataGridViewCellStyle dataGridViewCellStyle)
{
this.Font = dataGridViewCellStyle.Font;
}
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 false;
}
}
public bool RepositionEditingControlOnValueChange
{
get { return true; }
}
public DataGridView EditingControlDataGridView
{
get { return dataGridView; }
set { dataGridView = value; }
}
public Cursor EditingPanelCursor
{
get
{
return base.Cursor;
}
}
}
public class CellCommSelWS : DataGridViewTextBoxCell
{
public CellCommSelWS()
: base()
{
}
CellCommSelEditWS ctl;
public override void InitializeEditingControl(int rowIndex, object initialFormattedValue, DataGridViewCellStyle dataGridViewCellStyle)
{
base.InitializeEditingControl(rowIndex, initialFormattedValue, dataGridViewCellStyle);
ctl = DataGridView.EditingControl as CellCommSelEditWS;
ctl.Text = this.Value.ToString();
//ctl.ConnString = ((commselColumn)base.OwningColumn).ConnString;
string tid = "";
//DataRowView drv = (DataRowView)base.OwningRow.DataBoundItem;
tid = ((GDColumnWS)base.OwningColumn).CommonSelectionID;
//if (tid != "")
//{
// tid = drv[((GDColumnWS)base.OwningColumn).CommonSelectionID].ToString();
//}
//else
//{
// tid = "";
//}
//ctl.ConnString = _cn;
ctl.CommEditID = tid; }
public void setSection(string id)
{
ctl.CommEditID= id;
}
public override Type EditType
{
get
{
return typeof(CellCommSelEditWS);
}
} public override Type ValueType
{
get
{
return typeof(string);
}
} public override object DefaultNewRowValue
{
get
{
return "";
}
}
}
public class GDColumnWS : DataGridViewTextBoxColumn
{
public GDColumnWS()
: base()
{
}
string _ftid = "";
public string CommonSelectionID
{
set { _ftid = value; }
get { return _ftid; }
}
CellCommSelWS _celledit;
public override DataGridViewCell CellTemplate
{
get
{
return _celledit;
}
set
{
if (value != null && !value.GetType().IsAssignableFrom(typeof(CellCommSelWS)))
{
throw new InvalidCastException("Must be a Common Selection Cell");
}
_celledit = (CellCommSelWS)value;
}
}
}}
DataGridViewEditingControlShowingEventArgs e)
{
if (!this.IsKeyPressHandled
&& this.dataGridView1.CurrentCell.ColumnIndex ==
this.dataGridView1.Columns["MaskColumn"].Index)
{
TextBox tb = e.Control as TextBox;
tb.KeyPress += new KeyPressEventHandler(tb_KeyPress);
this.IsKeyPressHandled = true;
}
} void tb_KeyPress(object sender, KeyPressEventArgs e)
{
if (this.dataGridView1.CurrentCell.ColumnIndex ==
this.dataGridView1.Columns["MaskColumn"].Index)
{
// Prevent the key char to be input in the editing control
e.Handled = true; // Set focus to the MaskedTextBox for editing.
this.maskedTextBoxForEditing.Text = e.KeyChar.ToString();
this.maskedTextBoxForEditing.Focus();
}
}