How to increase cell quantity using keyboard up and down arrows ?

ahmed salah 3,216 Reputation points
2021-03-14T00:23:22.647+00:00

How to increase cell quantity using keyboard up and down arrows ?

I work on windows form desktop application using csharp

I face issue I can't increase quantity or decrease using press on key up or down
on datagridview control
when have quantity 1 value then when press up arrow then will be 2
when have quantity 2 then when press down arrow will be 1

private void GridTrxInvF_KeyPress(object sender, KeyPressEventArgs e)    
    {    
        int currentNumber = Utilities.ObjectConverter.ConvertToInteger(GridTrxInvF.Rows[GridTrxInvF.CurrentCell.RowIndex].Cells["Quantity"].Value);    
    
        if (e.KeyChar ==(char) Keys.Down)    
        {    
    
            GridTrxInvF.Rows[GridTrxInvF.CurrentCell.RowIndex].Cells["Quantity"].Value = (currentNumber - 1).ToString();    
        }    
        else if (e.KeyChar == (char)Keys.Up)    
        {    
            GridTrxInvF.Rows[GridTrxInvF.CurrentCell.RowIndex].Cells["Quantity"].Value = (currentNumber + 1).ToString();    
        }    
    
    }    

when press up arrow or down
it moving to quanityt previous row when press down keyboard button
or moving to quantity Next rows when press up keyboard button
so what i do to solve issue please ?

77407-image.png

.NET
.NET
Microsoft Technologies based on the .NET software framework.
3,624 questions
C#
C#
An object-oriented and type-safe programming language that has its roots in the C family of languages and includes support for component-oriented programming.
10,630 questions
0 comments No comments
{count} votes

1 answer

Sort by: Most helpful
  1. gekka 8,061 Reputation points MVP
    2021-03-14T01:57:20.613+00:00
    namespace WindowsFormsApp1
    {
        using System;
        using System.Windows.Forms;
    
    
        public partial class Form1 : Form
        {
            //private DataGridViewEx GridTrxInvF;
    
            public Form1()
            {
                InitializeComponent();
    
                this.GridTrxInvF.UpDownKeyPress += GridTrxInvF_UpDownKeyPress;
            }
    
            private void GridTrxInvF_UpDownKeyPress(object sender, KeyEventArgs e)
            {
                if (GridTrxInvF.CurrentCell.OwningColumn.Name != "Quantity")
                {
                    return;
                }
    
                int currentNumber = 0;
                var v = GridTrxInvF.Rows[GridTrxInvF.CurrentCell.RowIndex].Cells["Quantity"].Value;
                if (v != DBNull.Value && v != null)
                {
                    int.TryParse(v.ToString(), out currentNumber);
                }
    
                if (e.KeyData == Keys.Down)
                {
                    GridTrxInvF.Rows[GridTrxInvF.CurrentCell.RowIndex].Cells["Quantity"].Value = (currentNumber - 1).ToString();
                    e.Handled = true;
                }
                else if (e.KeyData == Keys.Up)
                {
                    GridTrxInvF.Rows[GridTrxInvF.CurrentCell.RowIndex].Cells["Quantity"].Value = (currentNumber + 1).ToString();
                    e.Handled = true;
                }
    
            }
        }
    
        class DataGridViewEx : DataGridView
        {
            protected override bool ProcessDataGridViewKey(KeyEventArgs e)
            {
                switch (e.KeyCode)
                {
                case Keys.Down:
                case Keys.Up:
                    UpDownKeyPress?.Invoke(this, e);
                    if (e.Handled)
                    {
                        return true;
                    }
                    break;
    
                }
                return base.ProcessDataGridViewKey(e);
            }
    
            public event KeyEventHandler UpDownKeyPress;
        }
    }
    
    0 comments No comments