C# DataGridView的單元格中只能輸入數字

控件類型:DataGridView

控件名稱:dgvGift_Condition

裏面用到的:IsNumeric、NotePastText、RestoreText 等請參見 前一日志“TextBox中只能輸入數字”。

下面例子中 dgvGift_Condition中 第2列和第4列 只能輸入數字

private DataGridViewTextBoxEditingControl EditingControl = new DataGridViewTextBoxEditingControl();

private void dgvGift_Condition_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)

{

if (this.dgvGift_Condition.CurrentCell.ColumnIndex == 1 || this.dgvGift_Condition.CurrentCell.ColumnIndex == 3)

{

EditingControl = (DataGridViewTextBoxEditingControl)(e.Control);

EditingControl.KeyPress += new KeyPressEventHandler(EditingControl_KeyPress);

EditingControl.TextChanged += new EventHandler(EditingControl_TextChanged);

}

}

void EditingControl_TextChanged(object sender, EventArgs e)

{

if (this.IsNumeric(this.EditingControl.Text, true, false))

{

this.NotePastText(this.EditingControl, ref PastText);

}

else

{

this.RestoreText(this.EditingControl, PastText);

}

}

void EditingControl_KeyPress(object sender, KeyPressEventArgs e)

{

this.CheckKeyIn(e, false);

}

private void dgvGift_Condition_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)

{

if (e.ColumnIndex == 1 || e.ColumnIndex == 3)

{

TextBox tb = new TextBox();

if (this.dgvGift_Condition.Rows[e.RowIndex].Cells[e.ColumnIndex].Value == null)

{

tb.Text = "";

}

else

{

tb.Text = this.dgvGift_Condition.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString();

}

this.NotePastText(tb, ref PastText);

}

}

private void dgvGift_Condition_CellEndEdit(object sender, DataGridViewCellEventArgs e)

{

EditingControl.KeyPress -= EditingControl_KeyPress;

EditingControl.TextChanged -= EditingControl_TextChanged;

}