private void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
int row = e.RowIndex;
int col = e.ColumnIndex;
if (row < 0 || col != 3)
return;
if (e.FormattedValue.ToString().Equals(String.Empty))
{
}
else
{
double quantity = 0;
try
{
quantity = Convert.ToDouble(e.FormattedValue.ToString());
if (quantity == 0)
{
MessageBox.Show("The quantity can not be Zero", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
e.Cancel = true;
return;
}
}
catch
{
MessageBox.Show("The quantity should be decimal value.", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
e.Cancel = true;
return;
}
}
}
.NET 4.0 позволяет встраивать в вашу сборку первичные сборки взаимодействия (или, скорее, те части, которые вам нужны), так что вам не нужно развертывать их вместе с вашим приложением.
По какой-то причине эта сборка не может быть встроена - но похоже, что это не проблема для вас. Просто откройте вкладку «Свойства» для сборки в Visual Studio 2010 и установите для параметра «Embed Interop Types» значение «False».
РЕДАКТИРОВАТЬ: См. Также ответ Майкла Густуса , удаляющий суффикс Class
из используемых вами типов.
Развертывание правильного ответа Джона.
Проблема здесь в том, что вы комбинируете новую функцию «Встраивать типы взаимодействия» (или NoPIA) с использованием типа класса. Функция «Embed Interop Types» работает, по существу, статически связывая все типы из PIA (Primary Interop Assembly) со ссылочной сборкой, устраняя накладные расходы на ее развертывание.
Эта функция отлично работает для большинства типов в PIA, но имеет ограничения. Одна из них заключается в том, что вы не можете встраивать классы (это проблема обслуживания). У Миши есть подробная статья в блоге о том, почему это запрещено
Как Ян Мне понадобилось некоторое время, чтобы понять это... =S Итак, для всех, кто ослеплен разочарованием.