Я изменяю приложение Winforms в .NET 3.5.
У меня есть DataGridViewComboBoxColumn, заполненный некоторыми жестко запрограммированными параметрами, как показано ниже.
//
// dgvCol_PropName
//
this.dgvCol_PropName.DisplayStyle = System.Windows.Forms.DataGridViewComboBoxDisplayStyle.ComboBox;
this.dgvCol_PropName.HeaderText = "Property Name";
this.dgvCol_PropName.Items.AddRange(new object[] {
"Option1",
"Option2",
"Option3"});
this.dgvCol_PropName.Name = "dgvCol_PropName";
this.dgvCol_PropName.Width = 150;
Я хотел бы сделать выбор этих опций отличным, чтобы после того, как параметр существует в сетке,он не может быть выбран снова (пользователь должен отредактировать текущую строку или удалить и заново ввести ее).
Есть ли быстрый способ сделать это?
Я думал, что будуподелитесь моим окончательным решением, если оно кому-нибудь поможет.Мой обработчик событий CellValidating находится ниже:
/// <summary>
/// Handle the validation event on the cell so that only properties that have not already been specified can be selected
/// </summary>
private void dg_FTPS_ExProps_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
var dataGrid = sender as DataGridView;
if (dataGrid != null)
{
// Only validate if that event is generated for the Property Name column
string headerText = dataGrid.Columns[e.ColumnIndex].HeaderText;
// Abort validation if cell is not in the PropertyName column.
// Rejected using the column index in case the column order changes but
// equally, there will be problems if the column header changes. (Pay your money and take a chance)
if (headerText.Equals("Property Name"))
// if (e.ColumnIndex == 0)
{
// Count the number of times the property exists in the table
int propertyCount = 0;
foreach (DataGridViewRow row in dg_FTPS_ExProps.Rows)
{
if( row.Cells[ e.ColumnIndex ].EditedFormattedValue.ToString().Equals( e.FormattedValue) == true )
{
propertyCount++;
}
}
// Check if multiple entreies have tried to be applied
if (propertyCount > 1)
{
e.Cancel = true;
}
}
}
}
Мне бы хотелось использовать LINQ для подсчета количества экземпляров, но я все еще учусь этому, поэтому я придерживался того, что знаю.