2011-08-28 60 views
0

所以,我有這個datagridview顯示我的整個表,因爲我們都知道主字段不能爲空或重複,所以我必須做一些驗證,然後將其保存到數據庫。在Datagridview驗證行

我設法讓我的驗證看到,如果我有一個現有的行,我將主鍵更改爲「空」或重複值,它鎖定該單元格中的datagridview,直到我修復它。

當我添加一個新行時,如果我沒有將焦點放在主鍵上的datagridview單元格驗證事件不會觸發,我更新數據庫時出現錯誤,因爲datagrid接受我的空值。

這是我在行驗證的嘗試,但它不起作用,我希望你的幫助。我希望該行被阻止,直到用戶向我的主鍵提供適當的輸入,該列在索引5上被稱爲「LOOPS」,但是,如果我踩在主鍵上,我發佈的代碼只會觸發鎖定!

private void dataGridView2_RowValidating(object sender, DataGridViewCellCancelEventArgs e) 
    { 
     if (dataGridView2.Rows[e.RowIndex].Cells[5].ToString() == "") 
     { 
      dataGridView2.Rows[e.RowIndex].ErrorText = "El campo clave de la tabla (Loops) no puede estar en blanco"; 
      e.Cancel = true; 
     } 
    } 

回答

1

只要確保PK列處於只讀狀態,並且最終還是隱藏的,所以用戶不會編輯它。根據您的數據訪問層設計(您用於加載和更新/插入數據的邏輯),您通常不會在插入時爲PK字段傳遞任何值,並且數據庫將爲您生成一個值(如果它是一個整數自動增量)。

如果仍然存在問題,請顯示加載數據的方式並將網格綁定到加載的數據以及將更改保存回數據庫的方式。

+0

我不能,用戶必須修改它,這是我給出的標準,而不是我的選擇。用戶必須選擇pk,這是過程工廠中儀器的識別號。我希望事件所做的是禁止用戶輸入一個新行,如果PK是空白的 – Joaquin