如何限制用户只在DataGridView列的特定单元格中输入数值?

时间:2009-06-08 08:16:42

标签: datagridview

我有一个DataGridView控件,我想限制用户只为特定列下的单元格输入数值。如何在DataGridView单元格中完成此类验证?

我可以创建一个简单的文本框,但如何验证DataGridView单元格呢?

3 个答案:

答案 0 :(得分:1)

您可以设置列将保留的数据类型,如以下代码段所示:

var columnSpec = new DataColumn();
columnSpec.DataType = <your type>
// Other initialisation
dataTable.Columns.Add(columnSpec);

dataGridView.DataSource = dataTable;

如果您直接使用DataGridView,则DataGridViewColumn类具有以下属性:

  

ValueType - 获取或设置列单元格中值的数据类型。

如果您使用此类创建列而不是更专业的类DataGridViewCheckBoxColumn等,这可能是您想要的。

答案 1 :(得分:1)

使用cellValidating事件:

Grid.CellValidating += new DataGridViewCellValidatingEventHandler(Grid_CellValidating);

Grid_CellValidating(object sender, args)
{
XXXX
}

答案 2 :(得分:1)

  • 添加EditingControlShowing事件
  • 在EditingControlShowing中,检查当前单元格是否位于所需列中。
  • 在EditingControlShowing中注册KeyPress的新事件(如果上述条件为真)。
  • 删除之前在EditingControlShowing中添加的任何KeyPress事件。
  • 在KeyPress事件中,检查如果key不是数字,则取消输入。

示例:

private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
        {
            e.Control.KeyPress -= new KeyPressEventHandler(Column1_KeyPress);
            if (dataGridView1.CurrentCell.ColumnIndex == 0) //Desired Column
            {
                TextBox tb = e.Control as TextBox;
                if (tb != null)
                {
                    tb.KeyPress += new KeyPressEventHandler(Column1_KeyPress);
                }
            }
        }

private void Column1_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsControl(e.KeyChar)
                && !char.IsDigit(e.KeyChar))
            {
                e.Handled = true;
            }
        }