当前位置: 代码迷 >> C# >> datagridview的EditingControlShowin事件,该如何处理
  详细解决方案

datagridview的EditingControlShowin事件,该如何处理

热度:115   发布时间:2016-05-05 05:08:06.0
datagridview的EditingControlShowin事件
各位大神,为了能实现datagridview的实时更新我用了EditingControlShowing事件,代码如下:
private void dataGridView_CurveDivide_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
        {
            if (e.Control.GetType().Equals(typeof(DataGridViewTextBoxEditingControl)))
            {
               e.Control.KeyPress += new KeyPressEventHandler(ValidateKeyPress);
                e.CellStyle.BackColor = System.Drawing.Color.FromName("window");
                //DataGridViewTextBoxEditingControl editingControl = e.Control as DataGridViewTextBoxEditingControl;
                editingControl_TextBox = e.Control as DataGridViewTextBoxEditingControl;
                editingControl_TextBox.TextChanged += new EventHandler(editingControl_TextChanged);
            }
        }

private void ValidateKeyPress(object sender, KeyPressEventArgs e)//验证datagridview输入合法数值,不可为负数或者非数字
        {
            if ((e.KeyChar < 48 || e.KeyChar > 57) && (e.KeyChar != 8) && (e.KeyChar != 46))
            {
                e.Handled = true;
            }
            else
            {
                e.Handled = false;
            }
        }


 public void editingControl_TextChanged(object sender, EventArgs e)
        {
            //TaskDialog.Show("1", lineLen[0,0].ToString());
            int rowIndex = dataGridView_CurveDivide.CurrentCell.RowIndex; //TaskDialog.Show("rowindex", rowIndex.ToString());
            int columnIndex = dataGridView_CurveDivide.CurrentCell.ColumnIndex;
            double change =Convert.ToDouble(dataGridView_CurveDivide.CurrentCell.EditedFormattedValue);
            double value=(change+10)%2;
            dataGridView_CurveDivide.Rows[rowIndex + 1].Cells[columnIndex].Value = value;
            editingControl_TextBox.TextChanged -= new EventHandler(editingControl_TextChanged);
        }

editingControl_TextChanged事件函数的功能主要是当我对一个单元格进行修改时该单元格的下一个单元格的值自动变成(修改值+10)%2的值。
目前这个事件对于输入的个位数有效,就是我把当前单元格修改成1~9时,下一个单元格的值会自动跳转到正确值,但当我想输入11等两位数时,datagridview每次只认准我输入的第一个数值就是1然后下一个单元格时根据1进行计算的,而不是11,这可怎么办啊??
------解决思路----------------------
editingControl_TextBox.TextChanged -= new EventHandler(editingControl_TextChanged);
因为你执行了这个,改变了一次之后,事件就被取消订阅了,不再执行了
  相关解决方案