2012-06-08 43 views
0

我有Datagridview第一列作爲組合框。我如何限制用戶只從列表中選擇一個項目。因此,如果在第一行中用戶選擇了「香蕉」已經,第二行中的香蕉不應該被允許(也許顯示一個消息框說:「香蕉已經存在」。限制datagridview中的重複行

感謝。

+0

我今天晚些時候會發佈一個答案,除非有人想知道是否考慮從下拉列表中刪除選定的項目?這是可能的,不是太複雜。對於你當前想要的,你需要使用CellValidation事件。 –

回答

1

這裏使用CellValidating事件一個簡單的解決方案:

void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e) 
{ 
    if (e.ColumnIndex == dataGridView1.Columns["MyCombo"].Index) 
    { 
     var query = from DataGridViewRow row in dataGridView1.Rows 
        where row.Cells[e.ColumnIndex].Value != null && row.Cells[e.ColumnIndex].Value.ToString() == e.FormattedValue.ToString() 
        where row.Index != e.RowIndex 
        select row; 

     if (query.Any()) 
     { 
      MessageBox.Show(string.Format("{0} already exists", e.FormattedValue.ToString())); 
      e.Cancel = true; 
     } 
    } 
} 

當用戶試圖離開包含組合框的細胞此事件觸發 - 另一種選擇是,當用戶離開使用RowValidating事件的當前行做同樣的事情。

+0

我個人認爲從可用性的角度來看,更好的方法是過濾可用的選項以確保已選擇的值不可用。 http://social.msdn.microsoft.com/forums/en-US/winformsdatacontrols/thread/586dbc24-ddc6-48b8-b707-d6108edbc652/ –