У меня есть DataGridView, который заполняется значениями объекта таким образом:DataGridView пользовательский ввод Validate
POI_grid.AutoGenerateColumns = true;
POI_grid.DataSource = pois; //pois is an object generated from a class
Я хотел бы пользователю редактировать некоторые из ячеек в этой сетке, но есть некоторые проверки, что должно произойти ..
В настоящее время я проверяю ввод пользователя с помощью txt-боксов, и мне было предложено сделать это в GridView для простоты. Как я проверка пользовательского ввода заключается в следующем: (я проверить, если пользователь ввел десятичные числа только)
private void txt_X_KeyPress(object sender, KeyPressEventArgs e)
{
if (((e.KeyChar < 48 || e.KeyChar > 57) && e.KeyChar != 8 && e.KeyChar != '.' && e.KeyChar != '-'))
{
e.Handled = true;
}
if (e.KeyChar == '.')
{
if ((sender as TextBox).Text.IndexOf(e.KeyChar) != -1)
e.Handled = true;
}
if (e.KeyChar == '-' && (sender as TextBox).SelectionStart > 0)
{
e.Handled = true;
}
}
Каков наилучший способ проверки пользовательского ввода так же, как я это делаю в текстовых полях, но в DataGridView?
До сих пор я пытался это следующее предложение: Рами
private void POI_grid_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
decimal por_x;
por_x = Convert.ToDecimal(POI_grid.CurrentCell.Value);
}
я, конечно, нужно будет добавить заявление поймать попробовать там, чтобы избежать проблем, но всякий раз, когда это возможно, я хотел бы, чтобы ограничить пользователя так как он типов в клетку, так же, как я делаю в текстовом поле ..
РЕШЕНИЕ:
Вот как я ее решил:
private void POI_grid_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
decimal por_x;
try
{
por_x = Convert.ToDecimal(POI_grid.CurrentCell.Value);
}
catch
{
POI_grid.CurrentCell.Value= "0";
}
}
private void POI_grid_DataError(object sender, DataGridViewDataErrorEventArgs e)
{
if (e.Exception is FormatException)
{
MessageBox.Show("Debe ingresar números decimales solamente", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
else
{
MessageBox.Show("Verifique el formato del número ingresado", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
Привет Рами, вы можете поделиться код? Я обнаружил событие CellEndEdit, но не уверен, как вы проверили запись. Спасибо – Matias
'частное: System :: Пустота metroGrid19_CellEndEdit (System :: Object^отправителем, System :: Окна :: Forms :: DataGridViewCellEventArgs^е) { \t \t \t попробовать { \t \t \t \t Convert :: ToDouble (metroGrid19 -> Ряды [е-> RowIndex] -> Ячейки [е-> ColumnIndex] -> значение-> ToString()); \t \t \t} \t \t \t улов (...) { \t \t \t \t metroGrid19-> Ряды [е-> RowIndex] -> Ячейки [е-> ColumnIndex] -> Значение = "0"; \t \t \t \t \t \t metroButton11-> Enabled = 1; \t \t} ' –
, который находится на C++, просто замените -> in. и не поймать никакого исключения, вы должны поймать определенный –