Csharp/C#教程:DataGridView Masked TextBox列分享


DataGridView Masked TextBox列

我有一个包含2列的DataGridView,我想为它创建一些输入掩码。 所以我发现了一个inheritance了maskedtextbox控件的小类,并允许你在datagridview中使用它。 一切正常,面具按预期工作,没什么大不了的。 继图书馆: http : //www.codeproject.com/Articles/26005/DataGridViewColumn-Hosting-MaskedTextBox

我的问题是,一旦行包含我需要的所有数据,按Enter或tab不会创建新行,即使我有datagridview1.AllowUserToAddRows = true。 然后我发现问题出在我链接的库中,因为当我添加一个简单的数据网格文本框时,按Enter或tab会创建一个新行。

所以我添加了这个例程,当我在最后一行的最后一列时,希望创建一个新行:

private void dgOre_CellEndEdit(object sender, DataGridViewCellEventArgs e) { if(e.RowIndex== dgOre.Rows.Count-1 && e.ColumnIndex== dgOre.Columns.Count - 1){ dgOre.Rows.Add(); } } 

这个例程的问题在于它确实添加了一行,但它在最后一行之前创建了它,创建了一个空隙,好像我在启动其他事件之前创建了一行。 我应该在maskedtextbox库中更改某些内容,或使用其他事件,但我不知道如何编辑和编辑内容。

以下是编辑控件的源代码:

 public class DataGridViewMaskedTextEditingControl : MaskedTextBox, IDataGridViewEditingControl { #region Fields private DataGridView dataGridView; private bool valueChanged; private int rowIndex; #endregion #region Constructor public DataGridViewMaskedTextEditingControl() { Mask = String.Empty; } #endregion #region Interface's properties public DataGridView EditingControlDataGridView { get { return dataGridView; } set { dataGridView = value; } } public object EditingControlFormattedValue { get { return Text; } set { if (value is string) Text = (string)value; } } public int EditingControlRowIndex { get { return rowIndex; } set { rowIndex = value; } } public bool EditingControlValueChanged { get { return valueChanged; } set { valueChanged = value; } } public Cursor EditingPanelCursor { get { return base.Cursor; } } public bool RepositionEditingControlOnValueChange { get { return false; } } #endregion #region Interface's methods public void ApplyCellStyleToEditingControl( DataGridViewCellStyle dataGridViewCellStyle) { Font = dataGridViewCellStyle.Font; // get the current cell to use the specific mask string DataGridViewMaskedTextCell cell = dataGridView.CurrentCell as DataGridViewMaskedTextCell; if (cell != null) { Mask = cell.Mask; } } public bool EditingControlWantsInputKey(Keys key, bool dataGridViewWantsInputKey) { // Note: In a DataGridView, one could prefer to change the row using // the up/down keys. switch (key & Keys.KeyCode) { case Keys.Left: case Keys.Right: case Keys.Home: case Keys.End: return true; default: return false; } } public object GetEditingControlFormattedValue(DataGridViewDataErrorContexts context) { return EditingControlFormattedValue; } public void PrepareEditingControlForEdit(bool selectAll) { if (selectAll) SelectAll(); else { SelectionStart = 0; SelectionLength = 0; } } #endregion #region MaskedTextBox event protected override void OnTextChanged(System.EventArgs e) { base.OnTextChanged(e); EditingControlValueChanged = true; if (EditingControlDataGridView != null) { EditingControlDataGridView.CurrentCell.Value = Text; } } #endregion } 

在编辑控件中进行更改时,应使用网格的NotifyCurrentCellDirty(true)格更改。 所以你可以在编辑控件中编写这样的代码:

上述就是C#学习教程:DataGridView Masked TextBox列分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

 protected override void OnTextChanged(EventArgs e) { base.OnTextChanged(e); EditingControlValueChanged = true; EditingControlDataGridView.NotifyCurrentCellDirty(true); } 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1013433.html

(0)
上一篇 2021年12月30日
下一篇 2021年12月30日

精彩推荐