C# datagridview限制单元格输入数字

本文介绍了一种在DataGridView中限制特定单元格只能输入数字的方法,并通过示例代码详细展示了如何实现这一功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自:http://blog.csdn.NET/i3039/article/details/5131522


方案一:进入编辑后EditingControlShowing后屏蔽其他按键

方案二:使用textbox覆盖在编辑单元格前面

方案三:对datagridview的单元格类型进行区分



为避免在DataGridView的单元格中输入错误的数据类型导致保存错误,可以用下面代码解决:

 

1、先设置DataGridView只能输入数字的列的外观属性:(见图1

DefaultCellStyle为:DataGridViewCellStyle { NullValue=0, Format=N2}

其中,NullValue=0表示此单元格为空时的默认值为0Format=N2则代表格式化

1

 

2、然后编写DataGridViewEditingControlShowing事件:

TextBox control;    //定义输入框控件对象

private  void  dataGridView1_EditingControlShowing(object sender,

  DataGridViewEditingControlShowingEventArgs e)

{

//只对TextBox类型的单元格进行验证

    if (e.Control.GetType().BaseType.Name == "TextBox") 

    {

        control = new TextBox();

        control = (TextBox)e.Control;

        if (control.Text == "0")    //需要限制输入数字的单元格

        {

            control.KeyPress += new KeyPressEventHandler(control_KeyPress);

        }

        else

        {

            //非数字类型单元格

            control.Leave += new EventHandler(control_Leave);

        }

    }

}

 

void control_KeyPress(object sender, KeyPressEventArgs e)

{

    //限制只能输入-9的数字,退格键,小数点和回车

    if (((int)e.KeyChar >= 48 && (int)e.KeyChar <= 57) || e.KeyChar == 13 || e.KeyChar == 8 || e.KeyChar == 46)

    {

        e.Handled = false;

    }

    else

    {

        e.Handled = true;

        MessageBox.Show("只能输入数字!");

    }

}

 

void control_Leave(object sender, EventArgs e)

{

    //如果需要限制字符串输入长度

    if (control.Text.Length != 11)

    {

        MessageBox.Show("只能为位!");

        control.Focus();

    }

}


C# 中,如果你想要限制 DataGridView 控件中的单元格只允许用户输入数字,你可以通过以下几个步骤来实现: 1. **数据属性**:首先,确保 DataGridView 的 `DataSource` 已经设置,并且相应的列(DataGridViewColumn)是 `DataGridViewTextBoxColumn` 类型,因为它是用于存储单一值的数据。 ```csharp DataGridViewTextBoxColumn numericColumn = new DataGridViewTextBoxColumn(); numericColumn.DataPropertyName = "ColumnName"; // 替换为实际数据源中的列名 numericColumn.DefaultCellStyle.Format = "N2"; // 设置默认数值格式,例如保留两位小数 ``` 2. **验证事件**:添加事件处理器到单元格编辑期间的 `Validating` 事件,检查输入是否符合要求。可以创建一个简单的正则表达式来匹配数字: ```csharp private void dataGridView_CellValidating(object sender, DataGridViewCellValidatingEventArgs e) { if (e.ColumnIndex == numericColumn.Index && !Regex.IsMatch(e.FormattedValue.ToString(), @"^-?\d+(\.\d+)?$")) // 正则表达式,只允许整数或小数 { e.Cancel = true; e.ErrorText = "请输入数字"; } } ``` 3. **焦点失去事件**:还可以处理 `LostFocus` 事件,防止用户离开单元格时带入非数字字符: ```csharp private void dataGridView_CellLostFocus(object sender, DataGridViewCellEventArgs e) { if (e.ColumnIndex == numericColumn.Index && !Regex.IsMatch(sender.Rows[e.RowIndex].Cells[numericColumn.Index].Value?.ToString(), @"^-?\d+(\.\d+)?$")) { sender.Rows[e.RowIndex].Cells[numericColumn.Index].Value = null; // 清除非法输入 } } ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值