我在网格中添加了TextBox
控件:我希望我的DataGridView
TextBox
列保存没有任何小数值的数字。我该怎么办?
答案 0 :(得分:3)
您可以处理要投射的DataGridView.EditingControlShowing事件 在要编辑的列中编辑控件到TextBox 限制输入,并将KeyPress事件附加到TextBox中 KeyPress事件处理函数,我们可以调用char.IsNumber() 限制键盘输入的方法,如下所示:
private void Form1_Load(object sender, EventArgs e)
{
DataTable dt = new DataTable();
dt.Columns.Add("c1", typeof(int));
dt.Columns.Add("c2");
for (int j = 0; j < 10; j++)
{
dt.Rows.Add(j, "aaa" + j.ToString());
}
this.dataGridView1.DataSource = dt;
this.dataGridView1.EditingControlShowing +=
new DataGridViewEditingControlShowingEventHandler(
dataGridView1_EditingControlShowing);
}
private bool IsHandleAdded;
void dataGridView1_EditingControlShowing(object sender,
DataGridViewEditingControlShowingEventArgs e)
{
if (!IsHandleAdded &&
this.dataGridView1.CurrentCell.ColumnIndex == 0)
{
TextBox tx = e.Control as TextBox;
if (tx != null)
{
tx.KeyPress += new KeyPressEventHandler(tx_KeyPress);
this.IsHandleAdded = true;
}
}
}
void tx_KeyPress(object sender, KeyPressEventArgs e)
{
if (!(char.IsNumber(e.KeyChar) || e.KeyChar == '\b'))
{
e.Handled = true;
}
}
答案 1 :(得分:1)
public Form1()
{
InitializeComponent();
dataGridView1.EditingControlShowing += dataGridView1_EditingControlShowing;
}
private void dataGridView1_EditingControlShowing(object sender , DataGridViewEditingControlShowingEventArgs e)
{
// Convert the editing control to a TextBox to register for KeyPress event
TextBox txt_edit = e.Control as TextBox;
if(txt_edit != null)
{
// Remove any existing handler
txt_edit.KeyPress -= TextBoxKeyPressed;
// Add the new handler
txt_edit.KeyPress += TextBoxKeyPressed;
}
}
private void TextBoxKeyPressed(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
// Test for numeric value or backspace in first column
// Change this to whatever column you only want digits for
if (dataGridView1.CurrentCell.ColumnIndex == 0)
{
// If its a numeric or backspace, display it. Not a numeric, ignore it
e.Handled = (!Char.IsDigit(e.KeyChar) && (e.KeyChar != (char)Keys.Back));
}
}
答案 2 :(得分:0)
试试这个:
Convert.ToInt32(textBox1.Text)