Dev GridControl 單元格輸入資料的驗證方法

衣舞晨風發表於2015-04-01

作者:jiankunking 出處:http://blog.csdn.net/jiankunking

今天要做一個dev gridcongtrol輸入單元格內容有效性的檢測,此處以不允許為空、該列的值不允許重複為例。(當然也可以使用別的方式,但別的方式不好實現:當該單元格值不滿足條件時,鎖定整個gridview,除該單元格之外的位置都不允許輸入,即將焦點鎖定在這一個單元格)。

1、首先將要驗證的列設定為RepositoryItemTextEdit型別,或者別的控制元件型別(其餘控制元件型別未測試),以下以RepositoryItemTextEdit型別為例
2、找到RepositoryItemTextEdit的Validating事件,具體程式碼如下:

<span style="font-size:14px;"> private void TextEdit1_Validating(object sender, System.ComponentModel.CancelEventArgs e)
        {
            BaseEdit textEdit = sender as BaseEdit;
            if (textEdit.Text.ToString().Trim().Length == 0)
            {
                e.Cancel = true;
                //標識 錯誤提示
                errorReason = 0;
                return;
            }
            else
            {
                //獲取GridView中所有的選中的行號
                //此處不允許多選,故只有一行
                int[] iRowId = this.gViewActList.GetSelectedRows();
                for (int i = 0; i < gViewActList.DataRowCount; i++)
                {
                    //重複檢驗時,不驗證當前行
                    if (i != iRowId[0])
                    {
                        //textEdit.EditValue  當前編輯的值
                        //需要注意的是取當前單元格的值要用:textEdit.EditValue
                        //GridView在TextEdit1_Validating執行時還未將你輸入的值更新進去,但執行完該方法後,即使不滿足條件,你所輸入的值,也會更新到GridView中去
                        //同時,也說明了,在Validating函式中排除重複值的時候,通過GridView獲取當前行的值,不是最新的,即不是你最近一次輸入的
                        if (textEdit.EditValue.ToString().Trim() == gViewActList.GetDataRow(i)["GridView上繫結的列名"].ToString().Trim())
                        {
                            e.Cancel = true;
                            //標識 錯誤提示
                            errorReason = 1;
                            return;
                        }
                    }
                }
            }</span>

3、根據Validating事件中的標識,進行錯誤資訊提示:

<span style="font-size:14px;">private void gViewActList_InvalidValueException(object sender, InvalidValueExceptionEventArgs e)
        {
            if (errorReason == 0)
            {
                e.ErrorText = "動作名稱不允許為空!";
            }
            else if (errorReason == 1)
            {
                e.ErrorText = "動作名稱不允許為重複!";
            }
            else
            {
                e.ErrorText = "值無效!";
            }
        }</span>

具體效果如下:


小注:

1、使用RepositoryItem.Validating事件,事件的"sender" 必須轉換為BaseEdit型別,使用EditValue來獲取當前輸入的值並進行校驗,如果校驗不通過,把e.Cancel設定True。這種方法一般用來對內建控制元件的單元格進行資料驗證。

2、使用 GridView.ValidatingEditor 事件 
 事件的"sender"必須轉換為GridView型別,當前列可以從GridView.FocusedColumn屬性獲得,值可以從e.Value獲取,如果校驗不通過,需要把e.Valid設定為False.。這種方法一般用於對整個Grid內的文字框進行資料驗證。

    具體錯誤提示資訊可以在GridView.InvalidValueException事件中進行處理


相關文章