有时候我们需要在编辑前先判断一下某个条件是否满足,如果不满足就禁止用户编辑,并给用户一个提示。由于如果我们使用常规的MessageBox提醒的话,弹出窗口后,用户点击确定按钮,此时表又会试图触发StartEdit事件,然后就会进入无限弹窗模式。所以,在StartEdit事件中,我们如果需要做个信息提示的话,优先选择非模式信息提示,比如在单元格中提示一个信息。这时候我们就可以按照下面这样,用RowData.SetError来实现信息提示。
效果如下:鼠标移动提示图标上时,会有提示信息显示出来。
VB.Net |
'定义一个临时变量,存储上一个设置了错误信息的行 Private m_LastErrorRowData As RowData=Nothing Public Sub StartEdit(sender As Object,e As C1.Win.C1FlexGrid.RowColEventArgs) '获得当前表 Dim tbl As SmGrid=sender '如果当前是绑定行 If tbl.Rows(e.Row).DataIndex>=0 Then If tbl.Rows(e.Row)("Gender")="男" Then '如果是男生,这里可以替换成自己的业务场景 '如果之前有设置过错误信息,则在这里清空一下 If m_LastErrorRowData IsNot Nothing Then m_LastErrorRowData.ClearErrors() End If '设置新的错误信息提示 tbl.Rows(e.Row).GetRowData().SetError(tbl.Cols(e.Col).Name,"男生不让编辑哟!") '将新的错误行赋值给临时变量 m_LastErrorRowData=tbl.Rows(e.Row).GetRowData() '禁止继续编辑数据 e.Cancel=True End If End If End Sub |
C# |
// 定义一个临时变量,存储上一个设置了错误信息的行 private RowData m_LastErrorRowData = null; public void StartEdit(object sender, C1.Win.C1FlexGrid.RowColEventArgs e) { // 获得当前表 SmGrid tbl = sender; // 如果当前是绑定行 if (tbl.Rows(e.Row).DataIndex >= 0) { if (tbl.Rows(e.Row)["Gender"].CType<string>("") == "男") { // 如果之前有设置过错误信息,则在这里清空一下 if (m_LastErrorRowData != null) m_LastErrorRowData.ClearErrors(); // 设置新的错误信息提示 tbl.Rows(e.Row).GetRowData().SetError(tbl.Cols(e.Col).Name, "男生不让编辑哟!"); // 将新的错误行赋值给临时变量 m_LastErrorRowData = tbl.Rows(e.Row).GetRowData(); // 禁止继续编辑数据 e.Cancel = true; } } } |