Previous topicNext topic
Help > 开发指南 > 数据处理典型场景 > 表格常规操作 >
行编辑判断并提示

有时候我们需要在编辑前先判断一下某个条件是否满足,如果不满足就禁止用户编辑,并给用户一个提示。由于如果我们使用常规的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;
        }
    }
}