如何在 UltraGrid 中单击取消按钮时停止单元格验证
How to stop cell validation on cancel button click in UltraGrid
在我的 ultragrid 中,我有一列 Nullable = Disallow,这意味着该字段不能为空。如果我尝试将我的列编辑为空白字符串,我的 CellDataError 事件将如我所料引发。然而,我想在我的整个对话框(单元格仍然空白)上点击取消,这会再次触发验证。
单击取消按钮时如何跳过验证?
为了跳过验证,您必须在单击取消按钮时允许可空值,然后在更新单元格时再次禁止可空值。以下是如何使用代码实现它。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
this.ultraGrid1.DataSource = InitializeGridSource();
this.ultraGrid1.DisplayLayout.Bands[0].Columns[0].Nullable = Infragistics.Win.UltraWinGrid.Nullable.Disallow;
this.ultraGrid1.AfterCellUpdate += new CellEventHandler(ultraGrid1_AfterCellUpdate);
this.Deactivate += new EventHandler(Form1_Deactivate);
}
private void ultraGrid1_AfterCellUpdate(object sender, Infragistics.Win.UltraWinGrid.CellEventArgs e)
{
this.ultraGrid1.ActiveCell.Column.Nullable = Infragistics.Win.UltraWinGrid.Nullable.Disallow;
}
private void Form1_Deactivate(object sender, EventArgs e)
{
if (this.OwnedForms.Length > 0 && this.OwnedForms[0].Text == "Data Error")
{
this.OwnedForms[0].FormClosing += new FormClosingEventHandler(Form1_FormClosing);
}
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if ((sender as Form).DialogResult == System.Windows.Forms.DialogResult.Cancel)
{
var activeCell = this.ultraGrid1.ActiveCell;
activeCell.Column.Nullable = Infragistics.Win.UltraWinGrid.Nullable.Automatic;
activeCell.EditorResolved.ExitEditMode(forceExit: true, applyChanges: true);
this.ultraGrid1.UpdateData();
}
}
private DataTable InitializeGridSource(int rows = 7)
{
DataTable newTable = new DataTable("Table1");
newTable.Columns.Add("String Column", typeof(string));
for (int index = 0; index < rows; index++)
{
newTable.Rows.Add(new object[] { "Text " + index });
}
return newTable;
}
}
在我的 ultragrid 中,我有一列 Nullable = Disallow,这意味着该字段不能为空。如果我尝试将我的列编辑为空白字符串,我的 CellDataError 事件将如我所料引发。然而,我想在我的整个对话框(单元格仍然空白)上点击取消,这会再次触发验证。
单击取消按钮时如何跳过验证?
为了跳过验证,您必须在单击取消按钮时允许可空值,然后在更新单元格时再次禁止可空值。以下是如何使用代码实现它。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
this.ultraGrid1.DataSource = InitializeGridSource();
this.ultraGrid1.DisplayLayout.Bands[0].Columns[0].Nullable = Infragistics.Win.UltraWinGrid.Nullable.Disallow;
this.ultraGrid1.AfterCellUpdate += new CellEventHandler(ultraGrid1_AfterCellUpdate);
this.Deactivate += new EventHandler(Form1_Deactivate);
}
private void ultraGrid1_AfterCellUpdate(object sender, Infragistics.Win.UltraWinGrid.CellEventArgs e)
{
this.ultraGrid1.ActiveCell.Column.Nullable = Infragistics.Win.UltraWinGrid.Nullable.Disallow;
}
private void Form1_Deactivate(object sender, EventArgs e)
{
if (this.OwnedForms.Length > 0 && this.OwnedForms[0].Text == "Data Error")
{
this.OwnedForms[0].FormClosing += new FormClosingEventHandler(Form1_FormClosing);
}
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if ((sender as Form).DialogResult == System.Windows.Forms.DialogResult.Cancel)
{
var activeCell = this.ultraGrid1.ActiveCell;
activeCell.Column.Nullable = Infragistics.Win.UltraWinGrid.Nullable.Automatic;
activeCell.EditorResolved.ExitEditMode(forceExit: true, applyChanges: true);
this.ultraGrid1.UpdateData();
}
}
private DataTable InitializeGridSource(int rows = 7)
{
DataTable newTable = new DataTable("Table1");
newTable.Columns.Add("String Column", typeof(string));
for (int index = 0; index < rows; index++)
{
newTable.Rows.Add(new object[] { "Text " + index });
}
return newTable;
}
}