C#DataGridView问题

wozuiaijiahui 2012-09-19 02:03:12
表格的某一列只能输入数字,不可粘贴,不可复制,不可以为空,即使删除到最后也只能为0,不可以为空!如果编辑的单元格失去焦点,不做处理。请问怎么实现?求高手。
...全文
147 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
_小黑_ 2013-07-08
  • 打赏
  • 举报
回复
引用 6 楼 a312100321 的回复:
刚好我写了个。你看下。

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;
                                }

                            }
                        }


                    }
                }
            }

        }
我去 你用 一个正则 多好
燕雀之志 2012-09-20
  • 打赏
  • 举报
回复
刚好我写了个。你看下。

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;
}

}
}


}
}
}

}
Kilin_Zhang 2012-09-20
  • 打赏
  • 举报
回复
不用DataGridView的飘过。
wozuiaijiahui 2012-09-19
  • 打赏
  • 举报
回复
有2点我已经实现了,只能输入数字,即使删除到最后也只能为0,不可以为空!但是复制,粘贴在网上找的TEXTBOX的代码加上去了居然没有效果。。如果编辑的单元格失去焦点,怎么做到不做处理?貌似表格本身有什么校验吧?每次都调用那个校验,每次都报错。
summerXJY100 2012-09-19
  • 打赏
  • 举报
回复
利用DataGridView的属性设置就可以实行不可改变
熙风 2012-09-19
  • 打赏
  • 举报
回复
列表中做判断,屏蔽相关按键和鼠标右键,然后对表格做数据验证
bdmh 2012-09-19
  • 打赏
  • 举报
回复
自己做个自定义控件,拦截这些按键,然后在grid中嵌入这种控件

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧