Lijina
Lijina

Reputation: 297

TextBox Column In DataGridView

I have added TextBox control inside the grid: I want my DataGridView TextBox column to hold numbers without any decimal values. How can I do it?

Upvotes: 6

Views: 8314

Answers (3)

Sam Casil
Sam Casil

Reputation: 948

Try this:

Convert.ToInt32(textBox1.Text)

Upvotes: 0

stuartd
stuartd

Reputation: 73243

From: http://social.msdn.microsoft.com/forums/en-US/winformsdatacontrols/thread/919b059c-dba9-40d2-bac7-608a9b120336

You can handle the DataGridView.EditingControlShowing event to cast the editing control to TextBox when editing in the column you want to restrict input on, and attach KeyPress event to the TextBox, in the KeyPress event handler function, we can call the char.IsNumber() method to restrict the key board input, something like this:

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;
   }
}

Upvotes: 3

SwDevMan81
SwDevMan81

Reputation: 49978

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));
   }
}

Upvotes: 1

Related Questions