[英]A Problem in DataGridView : datagridview seems readonly to user (WinForms)
我的表單中有一個datagridview。 它通過選擇國家/地區和國家/地區的城市來填充。我已經設置了屬性(AllowUsersToAddRow = True),但是當我運行我的項目時,用戶無法添加或編輯或刪除任何行。我選中了它。它不是readonly(readonly = false )並啟用(Enabled = true)
有什么問題?
填充datagridview的代碼:
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<T>
並將其設置為AllowNew
那么所有方法都可以:
var cities = new City[] { new City("New York","NY"), new City("Sydney","SY"), new City("London","LN") };
var citiesBinding = new BindingList<City>(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<City>(queryResults.ToList());
queryBinding.AllowNew = true;
dgvValues.DataSource = queryBinding;
}
請注意,a)我必須將查詢選擇中的匿名類型更改為具體類型City
並將Linq查詢返回的IEnumerable<T>
更改為IList<T>
兼容類型以創建BindingList<T>
。 這應該工作,但是:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.