Previous topicNext topic
Help > 使用指南 > 数据规范 > 02窗口选择 >
代码自定义执行

有时候我们需要通过一些特殊的权限判断来决定一个窗口是否打开供用户选择,所以这里我们介绍一下如何用代码控制打开窗口选择。

第一步:先设置一下列的自定义项目为“...”。也可以直接用代码tbl.Cols("列名称").ComboList="..."来设置。

第二步:设置好相应的窗体选择规范,但是最后不要绑定到表属性中去。并记录好相应的规范信息

第三步:到表事件CellButtonClick事件中去写代码。

 Vb.Net
        '定义一个私有字段,保存窗体选择数据规范
        Private m_frmSelect As FormSelectClient=Nothing
        Public Sub CellButtonClick(sender As Object,e As  C1.Win.C1FlexGrid.RowColEventArgs)
            '根据事件触发对象获得表对象
            Dim tbl As SmGrid=sender
            '根据列序号获得Column对象
            Dim strColName As String=tbl.Cols(e.Col).Name
            '获得当前行
            Dim dr As RowData=tbl.Rows(e.Row).GetRowData()
            '如果获得获得的当前行为空,表示当前行非绑定行,则退出
            If dr Is Nothing Then Return
            '处理各个弹出窗口
            Select Case strColName
                Case "TelephoneNO"
                    If dr.Locked=False Then
                        '先检查一下此
                        If m_frmSelect Is Nothing Then
                            '定义初始化窗体选择数据规范
                            m_frmSelect=New FormSelectClient("41c09a96a2dd42ca9bf9da666c9b33d1",False)
                            m_frmSelect.AcceptGrid=tbl '告诉数据规范结果往哪返回
                        End If
                        '取消单元格弹出文本编辑框的默认功能
                        e.Cancel=True
                        '如果选择窗口没有打开,或者处理隐藏状态,判断这个是防止新增弹窗重复调用
                        If m_frmSelect.SelectForm.IsOpened=False OrElse m_frmSelect.SelectForm.Visible=False Then
                            m_frmSelect.SelectForm.BindingColName=strColName '赋值当前列名
                            m_frmSelect.SelectForm.SelectSource = SelectSourceEnum.CellButtonClick '固定值,告诉窗体选择自己是从哪里打开的,方便根据特性处理数据
                            m_frmSelect.SelectForm.BindingBaseGrid=tbl '当前选择窗口绑定表
                            m_frmSelect.SelectForm.ShowDialog() '打开窗口,注意尽量不要用Show()方法,因为这样再次打开窗口执行不了SelectForm中的Load事件,可能数据返回的会不如预期
                        End If
                    End If
                Case Else
                    
            End Select
        End Sub

C#
    // 定义一个私有字段,保存窗体选择数据规范
    private FormSelectClient m_frmSelect = null;
    public void CellButtonClick(object sender, C1.Win.C1FlexGrid.RowColEventArgs e)
    {
        // 根据事件触发对象获得表对象
        SmGrid tbl = sender;
        // 根据列序号获得Column对象
        string strColName = tbl.Cols(e.Col).Name;
        // 获得当前行
        RowData dr = tbl.Rows(e.Row).GetRowData();
        // 如果获得获得的当前行为空,表示当前行非绑定行,则退出
        if (dr == null)
            return;
        // 处理各个弹出窗口
        switch (strColName)
        {
            case "TelephoneNO":
                {
                    if (dr.Locked == false)
                    {
                        // 先检查一下此
                        if (m_frmSelect == null)
                        {
                            // 定义初始化窗体选择数据规范
                            m_frmSelect = new FormSelectClient("41c09a96a2dd42ca9bf9da666c9b33d1", false);
                            m_frmSelect.AcceptGrid = tbl; // 告诉数据规范结果往哪返回
                        }
                        // 取消单元格弹出文本编辑框的默认功能
                        e.Cancel = true;
                        // 如果选择窗口没有打开,或者处理隐藏状态,判断这个是防止新增弹窗重复调用
                        if (m_frmSelect.SelectForm.IsOpened == false || m_frmSelect.SelectForm.Visible == false)
                        {
                            m_frmSelect.SelectForm.BindingColName = strColName; // 赋值当前列名
                            m_frmSelect.SelectForm.SelectSource = SelectSourceEnum.CellButtonClick; // 固定值,告诉窗体选择自己是从哪里打开的,方便根据特性处理数据
                            m_frmSelect.SelectForm.BindingBaseGrid = tbl; // 当前选择窗口绑定表
                            m_frmSelect.SelectForm.ShowDialog(); // 打开窗口,注意尽量不要用Show()方法,因为这样再次打开窗口执行不了SelectForm中的Load事件,可能数据返回的会不如预期
                        }
                    }

                    break;
                }

            default:
                {
                    break;
                }
        }
    }