C# dataGridView限制某一行的单元格只输入数字的方法之一

Part1. dataGridView限制某一行的单元格只输入数字的方法之一

首先,参考了如下的文章:

点击打开链接

然后,给你的dataGridView1添加dataGridView1_EditingControlShowing事件,并在事件的上方定义如下变量:

    public DataGridViewTextBoxEditingControl CellEdit = null;

       // dataGridView1_EditingControlShowing事件的完整代码如下,我是限制第一行和第二行的单元格里只能输入数字:

        private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
        {
            for (int i = 1; i < dataGridView1.Columns.Count; i++)
            {
                //如果是第1行和第二行,就限制只能输入数字,第三行不受限制
                if ((dataGridView1.CurrentCell.RowIndex == 0) || (dataGridView1.CurrentCell.RowIndex == 1))
                {
                    if (this.dataGridView1.CurrentCellAddress.X == i)
                    {
                        {
                            if (this.dataGridView1.CurrentCellAddress.X == i)
                            {
                                CellEdit = (DataGridViewTextBoxEditingControl)e.Control;
                                CellEdit.SelectAll();
                                CellEdit.KeyPress += Cells_KeyPress; //绑定事件
                            }
                        }
                    }
                }
                else //不然,移除这个事件。。。
                {
                    CellEdit = (DataGridViewTextBoxEditingControl)e.Control;
                    CellEdit.SelectAll();
                    CellEdit.KeyPress -= Cells_KeyPress; //绑定事件
                }
            }
        }

       private void Cells_KeyPress(object sender, KeyPressEventArgs e) //自定义事件
        {
            if (!(char.IsNumber(e.KeyChar)) && e.KeyChar != (char)8)
                e.Handled = true;
            //if (!(e.KeyChar >= '0' && e.KeyChar <= '9')) e.Handled = true;
            //if (e.KeyChar == '\b') e.Handled = false;
        }

特别注意的是,如果不把事件订阅移除,则每个单元格它都检查,不管是不是你选择的行。。。

Part2.dataGridView的其它使用总结

            //不允许用户添加行
            dataGridView1.AllowUserToAddRows = false;

            //不显示列标题。。则dataGridView1最左边的那一列不会出现
            dataGridView1.ColumnHeadersVisible = false;

            //更改列标题颜色。。
            dataGridView1.EnableHeadersVisualStyles = false;
            dataGridView1.ColumnHeadersDefaultCellStyle.BackColor = Color.DarkGray;

            //清空列表
            dataGridView1.Rows.Clear();

            //如果允许用户动态添加行,则以下语句意思是再添加28行,所以一共是29行。。。 
            //否则的话,则是总共添加28行        
            dataGridView1.Rows.Add(28);

            //把dataGridView1高度设为均等,
            int h = dataGridView1.Height;
            for (int i = 0; i < dataGridView1.Rows.Count; i++)
            {
                dataGridView1.Rows[i].Height = Convert.ToInt16(h / 32);
            }
            //如果发现还是跟页面不符,可以在高度后面修改数值,像这样:
            dataGridView1.Rows[i].Height = Convert.ToInt16(h / 31) + 3;

            //第i行第j列元素的访问方式..下标都是从0开始
            dataGridView1.Rows[i].Cells[j].Value = "8:30-9:30";

            //修改第12行的第0列、1列、2列的背景色为深灰色。。。
            dataGridView1[0, 12].Style.BackColor = Color.DarkGray;
            dataGridView1[1, 12].Style.BackColor = Color.DarkGray;
            dataGridView1[2, 12].Style.BackColor = Color.DarkGray;

            //设置dataGridView1的行字体大小
            dataGridView1.RowsDefaultCellStyle.Font = new Font("宋体", 12, FontStyle.Regular);

            //设置dataGridView1的列宽度根据单元格的内容自适应
            for (int i = 0; i < dataGridView1.ColumnCount; i++)
            {
                dataGridView1.Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
            }

 

你可能感兴趣的:(C#)