c# comboClassName.Items.Clear(); 报错:System.ArgumentException:“设置 DataSource 属性后无法修改项集合。”
时间: 2024-09-21 14:02:06 浏览: 51
在 C# 中,当你尝试通过 `.Clear()` 方法清空 `ComboBox` 控件(比如 `comboClassName`)的 `Items` 集合时,如果该控件已经设置了 `DataSource` 或关联了数据源(如数据库、数组等),则会报上述错误。因为一旦设置了数据源,`Items` 通常是只读的,系统不允许你在运行时直接添加或删除项目,除非它支持动态更新(例如,通过 `DataSource` 的 `Select` 方法选择新的条目)。
解决这个问题,你可以采取以下几个步骤:
1. **移除 DataSource**:如果你不需要数据源关联的动态数据,可以在调用 `Clear()` 之前先清除或卸载数据源:
```csharp
if (comboClassName.DataSource != null)
comboClassName.DataSource = null;
```
2. **禁用 DataSource 更新**:如果需要保留数据源,但又想手动清空 `Items`,可以设置 `DataSourceUpdateMode` 为 `Refresh` 或 `OnPropertyChanged`,允许在更改 `Items` 后刷新数据源:
```csharp
comboClassName.DataBindings["DataSource"].DataSourceUpdateMode = DataSourceUpdateMode.OnPropertyChanged;
```
3. **手动清空 Items**:如果是固定列表,可以先保存原始数据,然后手动填充 `Items`,再恢复:
```csharp
List<string> originalItems = new List<string>(comboClassName.Items);
comboClassName.Items.Clear();
// 然后重新添加数据
foreach (string item in originalItems)
comboClassName.Items.Add(item);
```
记得在实际操作前确认这样做不会影响你的应用逻辑和用户界面体验。
阅读全文