DataGridView中的一个问题:datagridview似乎只读用户(WinForms)

我的表单中有一个datagridview。 它通过选择country with country of country来填充。我设置了属性(AllowUsersToAddRow = True),但是当我运行我的项目时,用户无法添加或编辑或删除任何行。我检查了它。它不是只读的(readonly = false) )并启用(Enabled = true)

有什么问题?

填充数据网格代码:

private void cmbCountryValues_SelectedIndexChanged(object sender, EventArgs e) { dgvCityValues.Enabled = cmbCountryValues.SelectedIndex>=0; if (!dgvCityValues.Enabled) { dgvCityValues.DataSource = null; return; } int CountryId = int.Parse(cmbCountryValues.SelectedValue.ToString()); dgvValues.DataSource = from record in Program.dal.Cities(CountryId) select new { record.City}; } 

如果您发现此问题有用,请不要忘记投票。

举一个简化的例子,如果我做了相当于你的查询,例如:

 var cities = new City[] { new City("New York","NY"), new City("Sydney","SY"), new City("London","LN") }; dataGridView.DataSource = cities; 

我得到了与你相同的结果 – 没有添加新行的选项,但如果我改为BindingList并将其设置为AllowNew则一切正常:

 var cities = new City[] { new City("New York","NY"), new City("Sydney","SY"), new City("London","LN") }; var citiesBinding = new BindingList(cities); citiesBinding.AllowNew = true; dataGridView.DataSource = citiesBinding; 

编辑 – 为您的特定示例提供解决方案:

 private class City { public string Name { get; set; } } private void cmbCountryValues_SelectedIndexChanged(object sender, EventArgs e) { dgvCityValues.Enabled = cmbCountryValues.SelectedIndex >= 0; if (!dgvCityValues.Enabled) { dgvCityValues.DataSource = null; return; } int CountryId = int.Parse(cmbCountryValues.SelectedValue.ToString()); var queryResults = from record in Program.dal.Cities(CountryId) select new City { Name = record.City }; var queryBinding = new BindingList(queryResults.ToList()); queryBinding.AllowNew = true; dgvValues.DataSource = queryBinding; } 

请注意a)我必须将查询选择中的匿名类型更改为具体类型City并将Linq查询返回的IEnumerable更改为IList兼容类型以创建BindingList 。 这应该工作,但:)