Фокус строки Winforms
Возникла такая проблема, при добавлении, изменении, удалении данных фокус строки перемещается на самую первую строку. Мне же надо чтобы при добавлении строки, фокус падал на добавленную строку, при изменении данных оставался на этой же строке, а при удалении строки, фокус падал на строку которая шла перед ней. При этом если строка последняя не выдавало ошибки. Я использую GridControl от Devexpress.
Код добавления:
private void simpleButton3_Click(object sender, EventArgs e)
{
try
{
string databaseFileName = "ITS.fdb";
string connectionString = "*";
if ( kryptonTextBox3.Text != "" )
{
var insertCommand = new FbCommand("INSERT INTO COUNTERPARTIES ( \"НАЗВАНИЕ_ФИРМЫ\",\"СОКР_НАЗВАНИЕ\", \"ИНН\" ) VALUES ( @NAME,@SOKR_NAME, @INN)", connection);
connection.Open();
insertCommand.Parameters.Add("@NAME", kryptonTextBox1.Text);
insertCommand.Parameters.Add("@SOKR_NAME", kryptonTextBox2.Text);
insertCommand.Parameters.Add("@INN", kryptonTextBox3.Text);
insertCommand.ExecuteNonQuery();
connection.Close();
XtraMessageBox.Show("Контрагент добавлен!");
DisplayData();
ClearData();
}
else
{
XtraMessageBox.Show("Корректно заполните все данные!");
}
}
catch (Exception ex)
{
XtraMessageBox.Show("Произошла ошибка при добавлении: " + ex.Message);
}
finally
{
connection.Close();
}
}
Код изменения:
private void simpleButton23_Click(object sender, EventArgs e)
{
try
{
string databaseFileName = "ITS.fdb";
string connectionString = "*";
if ( kryptonTextBox3.Text != "")
{
using (var connection = new FbConnection(connectionString))
{
connection.Open();
var insertCommand = new FbCommand("update COUNTERPARTIES set ID=@ID,\"НАЗВАНИЕ_ФИРМЫ\"=@NAME,\"СОКР_НАЗВАНИЕ\"=@SOKR_NAME,\"ИНН\"=@INN where ID=@ID", connection);
insertCommand.Parameters.AddWithValue("@ID", kryptonTextBox13.Text);
insertCommand.Parameters.Add("@NAME", kryptonTextBox1.Text);
insertCommand.Parameters.Add("@SOKR_NAME", kryptonTextBox2.Text);
insertCommand.Parameters.Add("@INN", kryptonTextBox3.Text);
insertCommand.ExecuteNonQuery();
XtraMessageBox.Show("Данные обновлены!");
DisplayData();
ClearData();
}
}
else
{
}
}
catch (Exception ex)
{
XtraMessageBox.Show("Произошла ошибка при обновлении: " + ex.Message);
}
finally
{
connection.Close();
}
}
Код удаления:
private void simpleButton5_Click(object sender, EventArgs e)
{
try
{
if (!string.IsNullOrWhiteSpace(kryptonTextBox13.Text))
{
if (XtraMessageBox.Show("Вы точно хотите удалить данную строку?", "Подтверждение удаления", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
var deleteCommand = new FbCommand("DELETE FROM COUNTERPARTIES WHERE ID=@ID", connection);
connection.Open();
deleteCommand.Parameters.AddWithValue("@ID", kryptonTextBox13.Text);
deleteCommand.ExecuteNonQuery();
connection.Close();
XtraMessageBox.Show("Удаление завершено!");
DisplayData();
ClearData();
}
}
else
{
XtraMessageBox.Show("Ошибка удаления: пустая строка.");
}
}
catch (Exception ex)
{
XtraMessageBox.Show("Произошла ошибка при удалении: " + ex.Message);
}
finally
{
connection.Close();
}
}
Ответы (1 шт):
Автор решения: Vadim Muratov
→ Ссылка
private int _focusedRowIndex;
private int FocusedRowIndex
{
get => _focusedRowIndex;
set => _focusedRowIndex = value < 0 ? 0 : value;
}
//Добавление новой строки
private void simpleButton3_Click(object sender, EventArgs e)
{
try
{
string databaseFileName = "ITS.fdb";
string connectionString = "*";
if ( kryptonTextBox3.Text != "" )
{
var insertCommand = new FbCommand("INSERT INTO COUNTERPARTIES ( \"НАЗВАНИЕ_ФИРМЫ\",\"СОКР_НАЗВАНИЕ\", \"ИНН\" ) VALUES ( @NAME,@SOKR_NAME, @INN)", connection);
connection.Open();
insertCommand.Parameters.Add("@NAME", kryptonTextBox1.Text);
insertCommand.Parameters.Add("@SOKR_NAME", kryptonTextBox2.Text);
insertCommand.Parameters.Add("@INN", kryptonTextBox3.Text);
insertCommand.ExecuteNonQuery();
connection.Close();
XtraMessageBox.Show("Контрагент добавлен!");
DisplayData();
ClearData();
gridView1.FocusedRowHandle = gridView1.RowCount - 1;
}
else
{
XtraMessageBox.Show("Корректно заполните все данные!");
}
}
catch (Exception ex)
{
XtraMessageBox.Show("Произошла ошибка при добавлении: " + ex.Message);
}
finally
{
connection.Close();
}
}
//Обновление
private void simpleButton23_Click(object sender, EventArgs e)
{
FocusedRowIndex = gridView.FocusedRowHandle;
try
{
string databaseFileName = "ITS.fdb";
string connectionString = "*";
if ( kryptonTextBox3.Text != "")
{
using (var connection = new FbConnection(connectionString))
{
connection.Open();
var insertCommand = new FbCommand("update COUNTERPARTIES set ID=@ID,\"НАЗВАНИЕ_ФИРМЫ\"=@NAME,\"СОКР_НАЗВАНИЕ\"=@SOKR_NAME,\"ИНН\"=@INN where ID=@ID", connection);
insertCommand.Parameters.AddWithValue("@ID", kryptonTextBox13.Text);
insertCommand.Parameters.Add("@NAME", kryptonTextBox1.Text);
insertCommand.Parameters.Add("@SOKR_NAME", kryptonTextBox2.Text);
insertCommand.Parameters.Add("@INN", kryptonTextBox3.Text);
insertCommand.ExecuteNonQuery();
XtraMessageBox.Show("Данные обновлены!");
DisplayData();
ClearData();
gridView.FocusedRowHandle = FocusedRowIndex
}
}
else
{
}
}
catch (Exception ex)
{
XtraMessageBox.Show("Произошла ошибка при обновлении: " + ex.Message);
}
finally
{
connection.Close();
}
}
//удаление
private void simpleButton5_Click(object sender, EventArgs e)
{
FocusedRowIndex = gridView1.FocusedRowHandle;
try
{
if (!string.IsNullOrWhiteSpace(kryptonTextBox13.Text))
{
if (XtraMessageBox.Show("Вы точно хотите удалить данную строку?", "Подтверждение удаления", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
var deleteCommand = new FbCommand("DELETE FROM COUNTERPARTIES WHERE ID=@ID", connection);
connection.Open();
deleteCommand.Parameters.AddWithValue("@ID", kryptonTextBox13.Text);
deleteCommand.ExecuteNonQuery();
connection.Close();
XtraMessageBox.Show("Удаление завершено!");
DisplayData();
ClearData();
gridView1.FocusedRowHandle = --FocusedRowIndex;
}
}
else
{
XtraMessageBox.Show("Ошибка удаления: пустая строка.");
}
}
catch (Exception ex)
{
XtraMessageBox.Show("Произошла ошибка при удалении: " + ex.Message);
}
finally
{
connection.Close();
}
}