对DataGrid增加一条记录,其中所有的列都不能为空, 不为空的限制是在dataGridView1_CellValidating事件里面实现的。现在想在点 "新增" 按钮后, 取消对该 DataGrid 的操作, 请问 怎样才能实现?现在的问题是 只要焦点一离开 当前的cell, 就会提示"不能为空"的信息。 该怎样屏蔽这个信息,取消当前的状态?相关代码如下:
private void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
// Don't allow empty
if (String.IsNullOrEmpty(e.FormattedValue.ToString().Trim()))
{
MessageBox.Show("Please input a value.","Information");
e.Cancel = true;
return;
} if (dataGridView1.Columns[e.ColumnIndex].Name.Equals("StartingVolume", StringComparison.OrdinalIgnoreCase) ||
dataGridView1.Columns[e.ColumnIndex].Name.Equals("CurrentVolume", StringComparison.OrdinalIgnoreCase))
{
// Allow only numeric
bool bNumeric = true;
bNumeric = ApplicationProperties.IsNumericString(e.FormattedValue.ToString()); if (!bNumeric)
{
string strMess = string.Format("{0} must be a numeric value", dataGridView1.Columns[e.ColumnIndex].Name);
MessageBox.Show(strMess,"Error");
e.Cancel = true;
return;
}
} // Validating Catalog
if (dataGridView1.Columns[e.ColumnIndex].Name.Equals("Catalog", StringComparison.OrdinalIgnoreCase))
{
int i = 0;
foreach (Reagent reagent in DataLists.Reagents)
{
if (reagent.Catalog.Equals(e.FormattedValue.ToString().Trim(), StringComparison.OrdinalIgnoreCase))
i++;
}
if (i == 0)
{
MessageBox.Show("Input Catalog don't exist.","Error");
e.Cancel = true;
return;
}
}
}
private void imageButtonClose_Click(object sender, EventArgs e)
{
if (isAddingReagent)
{
isAddingReagent = false;
dataGridView1.EndEdit();
}
else
this.Close();
}
private void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
// Don't allow empty
if (String.IsNullOrEmpty(e.FormattedValue.ToString().Trim()))
{
MessageBox.Show("Please input a value.","Information");
e.Cancel = true;
return;
} if (dataGridView1.Columns[e.ColumnIndex].Name.Equals("StartingVolume", StringComparison.OrdinalIgnoreCase) ||
dataGridView1.Columns[e.ColumnIndex].Name.Equals("CurrentVolume", StringComparison.OrdinalIgnoreCase))
{
// Allow only numeric
bool bNumeric = true;
bNumeric = ApplicationProperties.IsNumericString(e.FormattedValue.ToString()); if (!bNumeric)
{
string strMess = string.Format("{0} must be a numeric value", dataGridView1.Columns[e.ColumnIndex].Name);
MessageBox.Show(strMess,"Error");
e.Cancel = true;
return;
}
} // Validating Catalog
if (dataGridView1.Columns[e.ColumnIndex].Name.Equals("Catalog", StringComparison.OrdinalIgnoreCase))
{
int i = 0;
foreach (Reagent reagent in DataLists.Reagents)
{
if (reagent.Catalog.Equals(e.FormattedValue.ToString().Trim(), StringComparison.OrdinalIgnoreCase))
i++;
}
if (i == 0)
{
MessageBox.Show("Input Catalog don't exist.","Error");
e.Cancel = true;
return;
}
}
}
private void imageButtonClose_Click(object sender, EventArgs e)
{
if (isAddingReagent)
{
isAddingReagent = false;
dataGridView1.EndEdit();
}
else
this.Close();
}
很简单的 ,代码都是验证 cell不能为空 或者其他的啊
主要怎样实现取消的功能, 代码仅作参考 :
重要的代码是:
e.Cancel = true;
return; isAddingReagent = false;
dataGridView1.EndEdit();
在保存事件验证
{
// Don't allow empty
if (String.IsNullOrEmpty(e.FormattedValue.ToString().Trim())) 将这行的红色部分去掉试试
{
MessageBox.Show("Please input a value.","Information");
e.Cancel = true;
return;
}
比如操作一个 grid, 操作一半了, 想取消刚才的操作, 那么 这个 “取消”按钮的脚本该怎样写呢?
去掉的话,那cell就允许为空了,现在就是不能为空
或者全局变量也行
增加行的同时isCellValidating=false
在if (String.IsNullOrEmpty(e.FormattedValue.ToString().Trim())) 将这行的红色部分去掉试试
之前先判断isCellValidating就行了
没看明白...
if (String.IsNullOrEmpty(e.FormattedValue.ToString().Trim()))
如果去掉了,那么 非空的判断在哪里实现呢?
那么是不是可以考虑换一种思路来实现:
CellValidating事件触发验证不通过时,提示用户,并询问是否要取消当前记录的添加?