我有Datagridview第一列作爲組合框。我如何限制用戶只從列表中選擇一個項目。因此,如果在第一行中用戶選擇了「香蕉」已經,第二行中的香蕉不應該被允許(也許顯示一個消息框說:「香蕉已經存在」。限制datagridview中的重複行
感謝。
我有Datagridview第一列作爲組合框。我如何限制用戶只從列表中選擇一個項目。因此,如果在第一行中用戶選擇了「香蕉」已經,第二行中的香蕉不應該被允許(也許顯示一個消息框說:「香蕉已經存在」。限制datagridview中的重複行
感謝。
這裏使用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
事件的當前行做同樣的事情。
我個人認爲從可用性的角度來看,更好的方法是過濾可用的選項以確保已選擇的值不可用。 http://social.msdn.microsoft.com/forums/en-US/winformsdatacontrols/thread/586dbc24-ddc6-48b8-b707-d6108edbc652/ –
我今天晚些時候會發佈一個答案,除非有人想知道是否考慮從下拉列表中刪除選定的項目?這是可能的,不是太複雜。對於你當前想要的,你需要使用CellValidation事件。 –