我有一个网格,当用户添加新行并编辑它时,我想在他尝试将焦点转移到另一行时弹出一个保存/放弃当前的chanegs选项消息。
问题是我无法处理新行,所以如果prevFocusHanlde == newRowHandle&& editModeOn
我只有-214 ...作为默认的新行句柄,但在行验证之后,网格为这个新行生成一个新的有效行句柄。 在哪里录制? 尝试在RowUpdated中进行,但它没有被调用,并且到那时处理还没有更新。
答案 0 :(得分:3)
当最终用户开始编辑新项目行/卡时,会引发ColumnView.InitNewRow事件。您可以处理此事件以初始化新记录中的特定字段。焦点移动到另一行后,新添加的行将添加到数据源中,并显示一个空白的新项目行。当修改的行即将失去焦点时,将引发ValidateRow事件。处理此事件以指定行数据是否有效以及是否允许焦点移动(您可以使用ColumnView.IsNewItemRow方法确定指定的行是否为New Item Row)。添加行后,其句柄立即等于BaseView.DataRowCount - 1 。
相关主题:
答案 1 :(得分:1)
无论我从问题中理解什么,你都想做下面的事情:
List<int> rowIndex = new List<int>();
private void dataGridView1_RowLeave(object sender, DataGridViewCellEventArgs e)
{
if (!rowIndex.Contains(e.RowIndex))
{
rowIndex.Add(e.RowIndex);
MessageBox.Show("Are you want to save changes?", "Save Confirm", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
}
}
答案 2 :(得分:-1)
您可以使用以下功能。
public static bool IsCorrectRowHandle(GridView view, int rowHandle)
{
bool result = false;
try
{
System.Data.DataRow row = view.GetDataRow(rowHandle);
if (row != null)
result = true;
}
catch
{
return result;
}
return result;
}
使用该功能;
if (bgwInvoiceDetails.RowCount > 0)
{
if (ADevExpress.DevExpressMethods.IsCorrectRowHandle(bgwInvoiceDetails, GridControl.NewItemRowHandle))
{
bgwInvoiceDetails.SetRowCellValue(GridControl.NewItemRowHandle, colExchangeType, leExchangeCode.EditValue);
bgwInvoiceDetails.SetRowCellValue(GridControl.NewItemRowHandle, colExchangePrice, teExchangePrice.EditValue);
}
for (int i = 0; i < bgwInvoiceDetails.RowCount; i++)
{
if (ADevExpress.DevExpressMethods.IsCorrectRowHandle(bgwInvoiceDetails, i))
bgwInvoiceDetails.SetRowCellValue(i, colExchangePrice, teExchangePrice.EditValue);
}
}