Lyndon Broz Tonelete
Lyndon Broz Tonelete

Reputation: 163

How to set focus to a newly added row or at the end of a row in datagridview?

I have a datagridview and an Add button. Each time I add data to the datagridview, I want it to set focus to the newly added row or at the end of it. Maybe because my datagridview always adds/inserts data at the end of it.

Here's my code for now : (I have some error in event SelectionChanged).

Boolean flag_cell_edited;
int currentRow;
int currentColumn;

private void ListView_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
    flag_cell_edited = true;
    currentColumn = e.ColumnIndex;
    currentRow = e.RowIndex;
}

private void ListView_SelectionChanged(object sender, EventArgs e)
{
    if(flag_cell_edited)
    {
        ListView.CurrentCell = ListView(currentColumn, currentRow);
        flag_cell_edited = false;
    }
}

ADD ROWS

static DataGridView _dg;
SqlDataAdapter _da;

public void Add()
    {
        sc.Open();

        try
        {
            using (cmd = new SqlCommand(@"INSERT INTO TableVotersInfo (Education, idnum, FirstName, MiddleName, LastName, SchoolYear, ControlNum, VResult)
                                    SELECT @ed, @idnum, @firstname, @middlename, @lastname, @schoolyear, @controlnum, 'Not Voted' 
                                    WHERE @idNum NOT IN (SELECT idNum FROM TableVotersInfo);", sc))
            {
                Param();

                var rowsAffected = cmd.ExecuteNonQuery();
                if (rowsAffected == 0)
                {
                    MessageBox.Show("ID number already exist!");
                    FAddVoters._checkID = checkID;
                    FAddVoters._cleardata = "0";
                }
                else
                {
                    MessageBox.Show("Data Stored Successfully!");
                    FAddVoters._cleardata = cleardata;
                    FAddVoters._checkID = "0";
                }
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
        finally
        {
            sc.Close();
        }
    }


public void retList()
{
    sc.Open();
    cmd = new SqlCommand("SELECT * FROM TableVotersInfo", sc);

    try
    {
        _da = new SqlDataAdapter();
        _da.SelectCommand = cmd;
        DataTable _dt = new DataTable();
        _da.Fill(_dt);
        BindingSource bs = new BindingSource();
        bs.DataSource = _dt;
        _dg.DataSource = bs;
        _da.Update(_dt);
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
    finally
    {
        sc.Close();
    }
}

Upvotes: 0

Views: 3225

Answers (1)

King King
King King

Reputation: 63387

You can use the RowsAdded event like this:

DataGridViewRow lastSelected;
//RowsAdded event handler for your dataGridView1
private void dataGridView1_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e){
    if (dataGridView1.CurrentCell != null) 
       dataGridView1.CurrentCell.OwningRow.Selected = false;
    if (lastSelected != null) lastSelected.Selected = false;
    lastSelected = dataGridView1.Rows[e.RowIndex];
    lastSelected.Selected = true;
}

NOTE: The code is intended to use for single added row only. If multi rows are added, the first one of them will be selected.

Upvotes: 1

Related Questions