有時候我們需要通過一些特殊的權(quán)限判斷來決定一個窗口是否打開供用戶選擇,所以這里我們介紹一下如何用代碼控制打開窗口選擇。
第一步:先設(shè)置一下列的自定義項(xiàng)目為“...”。也可以直接用代碼tbl.Cols("列名稱").ComboList="..."來設(shè)置。
第二步:設(shè)置好相應(yīng)的窗體選擇規(guī)范,但是最后不要綁定到表屬性中去。并記錄好相應(yīng)的規(guī)范信息
第三步:到表事件CellButtonClick事件中去寫代碼。
Vb.Net |
'定義一個私有字段,保存窗體選擇數(shù)據(jù)規(guī)范 Private m_frmSelect As FormSelectClient=Nothing Public Sub CellButtonClick(sender As Object,e As C1.Win.C1FlexGrid.RowColEventArgs) '根據(jù)事件觸發(fā)對象獲得表對象 Dim tbl As SmGrid=sender '根據(jù)列序號獲得Column對象 Dim strColName As String=tbl.Cols(e.Col).Name '獲得當(dāng)前行 Dim dr As RowData=tbl.Rows(e.Row).GetRowData() '如果獲得獲得的當(dāng)前行為空,表示當(dāng)前行非綁定行,則退出 If dr Is Nothing Then Return '處理各個彈出窗口 Select Case strColName Case "TelephoneNO" If dr.Locked=False Then '先檢查一下此 If m_frmSelect Is Nothing Then '定義初始化窗體選擇數(shù)據(jù)規(guī)范 m_frmSelect=New FormSelectClient("41c09a96a2dd42ca9bf9da666c9b33d1",False) m_frmSelect.AcceptGrid=tbl '告訴數(shù)據(jù)規(guī)范結(jié)果往哪返回 End If '取消單元格彈出文本編輯框的默認(rèn)功能 e.Cancel=True '如果選擇窗口沒有打開,或者處理隱藏狀態(tài),判斷這個是防止新增彈窗重復(fù)調(diào)用 If m_frmSelect.SelectForm.IsOpened=False OrElse m_frmSelect.SelectForm.Visible=False Then m_frmSelect.SelectForm.BindingColName=strColName '賦值當(dāng)前列名 m_frmSelect.SelectForm.SelectSource = SelectSourceEnum.CellButtonClick '固定值,告訴窗體選擇自己是從哪里打開的,方便根據(jù)特性處理數(shù)據(jù) m_frmSelect.SelectForm.BindingBaseGrid=tbl '當(dāng)前選擇窗口綁定表 m_frmSelect.SelectForm.ShowDialog() '打開窗口,注意盡量不要用Show()方法,因?yàn)檫@樣再次打開窗口執(zhí)行不了SelectForm中的Load事件,可能數(shù)據(jù)返回的會不如預(yù)期 End If End If Case Else End Select End Sub |
C# |
// 定義一個私有字段,保存窗體選擇數(shù)據(jù)規(guī)范 private FormSelectClient m_frmSelect = null; public void CellButtonClick(object sender, C1.Win.C1FlexGrid.RowColEventArgs e) { // 根據(jù)事件觸發(fā)對象獲得表對象 SmGrid tbl = sender; // 根據(jù)列序號獲得Column對象 string strColName = tbl.Cols(e.Col).Name; // 獲得當(dāng)前行 RowData dr = tbl.Rows(e.Row).GetRowData(); // 如果獲得獲得的當(dāng)前行為空,表示當(dāng)前行非綁定行,則退出 if (dr == null) return; // 處理各個彈出窗口 switch (strColName) { case "TelephoneNO": { if (dr.Locked == false) { // 先檢查一下此 if (m_frmSelect == null) { // 定義初始化窗體選擇數(shù)據(jù)規(guī)范 m_frmSelect = new FormSelectClient("41c09a96a2dd42ca9bf9da666c9b33d1", false); m_frmSelect.AcceptGrid = tbl; // 告訴數(shù)據(jù)規(guī)范結(jié)果往哪返回 } // 取消單元格彈出文本編輯框的默認(rèn)功能 e.Cancel = true; // 如果選擇窗口沒有打開,或者處理隱藏狀態(tài),判斷這個是防止新增彈窗重復(fù)調(diào)用 if (m_frmSelect.SelectForm.IsOpened == false || m_frmSelect.SelectForm.Visible == false) { m_frmSelect.SelectForm.BindingColName = strColName; // 賦值當(dāng)前列名 m_frmSelect.SelectForm.SelectSource = SelectSourceEnum.CellButtonClick; // 固定值,告訴窗體選擇自己是從哪里打開的,方便根據(jù)特性處理數(shù)據(jù) m_frmSelect.SelectForm.BindingBaseGrid = tbl; // 當(dāng)前選擇窗口綁定表 m_frmSelect.SelectForm.ShowDialog(); // 打開窗口,注意盡量不要用Show()方法,因?yàn)檫@樣再次打開窗口執(zhí)行不了SelectForm中的Load事件,可能數(shù)據(jù)返回的會不如預(yù)期 } } break; } default: { break; } } } |