请问有什么办法可以控制DataGridTextBoxColumn里只能输入10位整数加两位小数的内容?

解决方案 »

  1.   

    输入时可以用一个文本框或者数值框置顶,在里面输入,然后把输入的值转换成你需要的值显示在DataGridTextBoxColumn里面
      

  2.   

    CellValidating 中处理            DataGridView dgv = new DataGridView();
                dgv.CellValidating +=(sender,e) =>
                {
                    string strValue = e.FormattedValue.ToString();
                    if(!Regex.Match(strValue,@"^\d{10}\.\d{2}$").Success)
                    {
                        e.Cancel = true;
                    }
                    else 
                    {
                        //to do
                    }
                };
      

  3.   

    改个小问题,如果strValue为空是不应该设置e.Cancel = true的,修改后的代码: dgv.CellValidating +=(sender,e) =>
                {
                    string strValue = e.FormattedValue.ToString();
                    if(string.IsNullOrEmpty(strValue))
                    {
                       return;
                    }
                    if(!Regex.Match(strValue,@"^\d{10}\.\d{2}$").Success)
                    {
                        e.Cancel = true;
                    }
                    else 
                    {
                        //to do
                    }
                };
      

  4.   

    private void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)  
      {  
      double d= 0.0;  
      dataGridView1.Rows[e.RowIndex].ErrorText = string.Empty;  
      if(dataGridView1.Columns[e.ColumnIndex].DataPropertyName == "A")  
      {  
      if(!double.TryParse(e.FormattedValue.ToString(),out d) || d<0.0)  
      {  
      dataGridView1.Rows[e.RowIndex].ErrorText = "输入有误!";  
      e.Cancel = true;  
      }  
      }  
      }  
    正则^[0-9]\d*\.\d{0,2}$|^\d*$
      

  5.   

    可以在cell的KeyUp事件中判断一下
      

  6.   

    我写了一个例子,就是在你点击单元格时,用一个numberUpDown控件置顶,当然这个控件只是数字和小数点,可以控制位数和最大值。
    代码如下
            //进入编辑时发生
            private void dgvCable_CellEnter(object sender, DataGridViewCellEventArgs e)
            {
                int nRow = dgvCable.CurrentCell.RowIndex;              //当前行
                int nCol = dgvCable.CurrentCell.ColumnIndex;           //当前列
                if (this.dgvCable.Columns[e.ColumnIndex].HeaderText != CableColName.HeaderText)
                {
                    Rectangle r = this.dgvCable.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, true);
                    r = this.dgvCable.RectangleToScreen(r);
                    this.numUdCable.Location = this.dgvCable.RectangleToClient(r).Location;
                    this.numUdCable.Size = r.Size;                numUdCable.Value = Convert.ToDecimal(dgvCable[nCol, nRow].Value);
                    this.numUdCable.Visible = true;
                    this.numUdCable.BringToFront();
                    numUdCable.Focus();                     //将焦点给数字控件
                }
                else
                {
                    numUdCable.Visible = false;
                }
            }        //值改变时发生
            private void numUdCable_ValueChanged(object sender, EventArgs e)
            {
                int nRow = dgvCable.CurrentCell.RowIndex;              //当前行
                int nCol = dgvCable.CurrentCell.ColumnIndex;           //当前列            dgvCable.CurrentCell.Value = Convert.ToString(Math.Round(numUdCable.Value, 2));     //保存2位有效数字
            }