Я пытаюсь позволить пользователю изменять данные непосредственно в DataGridView, этот DataGridView получает DataSource из DataTable из DataBase
Я использую DataError Event, чтобы попытаться помочь пользователю правильно написать данные.
Мой поток ошибок должен быть
1) Пользователь записывает данные 2) пользователь пишет 'a' в ячейку, которая должна быть Int 3) Я говорю пользователю, что он ошибся в какой-то ячейке 4) Я сфокусировал пользователяснова в той же ячейке, когда он получил ошибку 5) Я не удаляю эту строку и не удаляю значение в этой строке, я также не позволяю пользователю выйти из фокуса на этой ячейке и строке.
На самом деле я не нашел, как вернуть фокус обратно на ячейку после использования события. Этот код не работает для меня ... private void dataGridViewDefinePath_DataError (object sender,
DataGridViewDataErrorEventArgs e)
{
MessageBox.Show("הייתה בעייה בהכנסת אחד הנתונים");
((DataGridView)sender).CurrentCell = ((DataGridView)sender).Rows[e.RowIndex].Cells[e.ColumnIndex];
((DataGridView)sender).BeginEdit(true);
e.Cancel = false;
}
Также после этогоошибка моя строка удалить ..
Это мой код:
using PathDefiner;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace UIPath
{
public partial class DefineForm : Form
{
private Action<string, DataTable> SaveAction { get; set; }
private Func<string, DataTable> SetAction { get; set; }
private string currentCatalog;
public DefineForm(string catalog, Action<string, DataTable> saveAction, Func<string, DataTable> setAction)
{
InitializeComponent();
SaveAction = saveAction;
SetAction = setAction;
currentCatalog = Globals.CurrentCatalog = catalog;
dataGridViewDefinePath.DataSource = SetAction(currentCatalog);
DataTable dt = dataGridViewDefinePath.DataSource as DataTable;
dt.Columns[0].ReadOnly = true;
}
private void dataGridViewPathDefine_DefaultValuesNeeded(object sender, DataGridViewRowEventArgs e)
{
e.Row.Cells["BatteryCatalog"].Value = Globals.CurrentCatalog;
}
private void buttonExit_Click(object sender, EventArgs e)
{
Close();
}
private void buttonSaveAndExit_Click(object sender, EventArgs e)
{
DataTable dt = dataGridViewDefinePath.DataSource as DataTable;
dt.Columns[0].ReadOnly = false;
for (int i = 0; i < dt.Rows.Count; i++)
{
dt.Rows[i]["BatteryCatalog"] = Globals.CurrentCatalog;
}
dt.Columns[0].ReadOnly = true;
SaveAction(Globals.CurrentCatalog, dt);
Close();
}
private void dataGridViewDefinePath_DataError(object sender, DataGridViewDataErrorEventArgs e)
{
MessageBox.Show("הייתה בעייה בהכנסת אחד הנתונים");
((DataGridView)sender).CurrentCell = ((DataGridView)sender).Rows[e.RowIndex].Cells[e.ColumnIndex];
((DataGridView)sender).BeginEdit(true);
e.Cancel = false;
}
private void dataGridViewDefinePath_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
}
}
}