DataGridView中的文本框列
本文关键字:文本 DataGridView | 更新日期: 2023-09-27 18:10:01
我已经在网格中添加了TextBox
控件:我希望我的DataGridView
TextBox
列保存没有任何十进制值的数字。我该怎么做呢?
From: http://social.msdn.microsoft.com/forums/en-US/winformsdatacontrols/thread/919b059c-dba9-40d2-bac7-608a9b120336
可以处理DataGridView。editingcontrol正在显示要转换的事件在要编辑的列中编辑时,将编辑控件设置为"文本框"限制输入,并将KeyPress事件附加到文本框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;
}
}
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));
}
}
试试这个:
Convert.ToInt32(textBox1.Text)