首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C#DataGridView有关问题

2012-10-23 
C#DataGridView问题表格的某一列只能输入数字,不可粘贴,不可复制,不可以为空,即使删除到最后也只能为0,不

C#DataGridView问题
表格的某一列只能输入数字,不可粘贴,不可复制,不可以为空,即使删除到最后也只能为0,不可以为空!如果编辑的单元格失去焦点,不做处理。请问怎么实现?求高手。

[解决办法]
自己做个自定义控件,拦截这些按键,然后在grid中嵌入这种控件
[解决办法]
列表中做判断,屏蔽相关按键和鼠标右键,然后对表格做数据验证
[解决办法]
刚好我写了个。你看下。

C# code
private void EditingControl_KeyPress(object sender, KeyPressEventArgs e)        {            var dgvColDataName = dgvDetail.Columns[dgvDetail.CurrentCell.ColumnIndex].DataPropertyName.ToLower();            var Query = frmProperty.cellFomatItemList.Where(t => t.DataColName == dgvColDataName);            foreach (var item in Query)            {                if (dgvDetail.CurrentCell.IsInEditMode && item.isNumber)                {                    if (item.IsNegativevalue)                    {                        if (!item.isDecimal && dgvDetail.CurrentCell.IsInEditMode)                        {                            if (!(char.IsDigit(e.KeyChar) || e.KeyChar == '\b' || e.KeyChar == '-')) //只能输入数字和backspace键                            {                                e.Handled = true;                            }                        }                        if (item.isDecimal && dgvDetail.CurrentCell.IsInEditMode)                        {                            TextBox tb = (TextBox)sender;                            string strMathchValue = tb.Text.Trim();                            if (!(char.IsDigit(e.KeyChar) || e.KeyChar == '\b' || e.KeyChar == '.' || e.KeyChar == '-')) //只能输入数字、backspace键、小数点                            {                                e.Handled = true;                            }                            else                            {                                if (e.KeyChar == '.' && strMathchValue.Contains('.')) //若已经包含小数点,不允许再次输入                                {                                    e.Handled = true;                                }                                if (e.KeyChar == '-' && strMathchValue.Contains('-')) //若已经包含小数点,不允许再次输入                                {                                    e.Handled = true;                                }                            }                        }                    }                    else                    {                        if (!item.isDecimal && dgvDetail.CurrentCell.IsInEditMode)                        {                            if (!(char.IsDigit(e.KeyChar) || e.KeyChar == '\b')) //只能输入数字和backspace键                            {                                e.Handled = true;                            }                        }                        if (item.isDecimal && dgvDetail.CurrentCell.IsInEditMode)                        {                            TextBox tb = (TextBox)sender;                            string strMathchValue = tb.Text.Trim();                            if (!(char.IsDigit(e.KeyChar) || e.KeyChar == '\b' || e.KeyChar == '.')) //只能输入数字、backspace键、小数点                            {                                e.Handled = true;                            }                            else                            {                                if (e.KeyChar == '.' && strMathchValue.Contains('.')) //若已经包含小数点,不允许再次输入                                {                                    e.Handled = true;                                }                            }                        }                    }                }            }        } 

热点排行