WinForms – Eine DataGridView-Spalte kann nicht bearbeitet werden

WinForms – Eine DataGridView-Spalte kann nicht bearbeitet werden

Problem

Sie verwenden eine DataGridView und können eine oder mehrere Spalten nicht bearbeiten. Wenn Sie auf eine Zelle klicken, wird sie nur hervorgehoben und wechselt nicht in den Bearbeitungsmodus.

Überprüfen Sie, ob Ihr Raster, Ihre Spalte oder Ihre gebundene Eigenschaft schreibgeschützt sind. Wenn einer davon schreibgeschützt ist, können Sie die Werte in der Spalte nicht bearbeiten.

Lösung

Fall 1 – DataGridView ist schreibgeschützt

Als erstes müssen Sie prüfen, ob das Grid schreibgeschützt ist. Wenn es schreibgeschützt ist, können Sie keine der Spalten bearbeiten. Legen Sie die ReadOnly-Eigenschaft des Rasters auf „false“ fest.

Hinweis:Das Aktivieren von „Bearbeitung aktivieren“ bewirkt dasselbe (es wird mit der ReadOnly-Eigenschaft verknüpft).

Wenn das gut aussieht, prüfen Sie, ob Ihr Code ReadOnly irgendwo programmgesteuert festlegt.

Fall 2 – Spalte ist schreibgeschützt

Wenn Sie die Spalte manuell über die Benutzeroberfläche oder programmgesteuert hinzugefügt haben (anstatt dass Spalten automatisch generiert werden), prüfen Sie, ob die Spalte schreibgeschützt ist. Setzen Sie die ReadOnly-Eigenschaft der Spalte auf „false“.

Überprüfen Sie den Code, um festzustellen, ob Sie die ReadOnly-Eigenschaft irgendwo festlegen.

Fall 3 – Spalte ist mit einem nicht öffentlichen Setter an eine Eigenschaft gebunden

Um eine Spalte bearbeitbar zu machen, muss sie mit einem öffentlichen Setter an eine Eigenschaft gebunden werden. Wenn die Eigenschaft einen nicht öffentlichen Setter hat, macht sie die Spalte effektiv schreibgeschützt.

Hier ist ein Beispiel. Nehmen wir an, Sie binden an eine Liste von Rezepten und die Recipe-Klasse hat die folgende Definition:

public class Recipe
{
	public string Name { get; set; }
	public int Meals { get; internal set; }
}
Code language: C# (cs)

Die Meals-Eigenschaft hat einen nicht öffentlichen Setter. Daher ist die Spalte „Mahlzeiten“ schreibgeschützt und Sie können sie nicht bearbeiten. Setter öffentlich machen:

public class Recipe
{
	public string Name { get; set; }
	public int Meals { get; set; }
}
Code language: C# (cs)

Fall 4 – Ein Event-Handler verhindert, dass die Bearbeitung festgeschrieben wird

Wenn Sie die Spalte immer noch nicht bearbeiten können, prüfen Sie, ob Sie einen Ereignishandler haben, der die Bearbeitungen stört.

Hier ist nur eines von vielen möglichen Beispielen. Angenommen, Sie haben den folgenden CellValidating-Ereignishandler, der CancelEdit() bedingt aufruft:

private void recipeGrid_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
        //some conditional logic
	recipeGrid.CancelEdit();
}
Code language: C# (cs)

Nehmen wir an, die bedingte Logik ist fehlerhaft, sodass sie immer zum Aufruf von CancelEdit() führt. In diesem Szenario können Sie neue Werte eingeben, es wird jedoch immer auf den alten Wert zurückgesetzt. Mit anderen Worten, Sie können in den Bearbeitungsmodus wechseln, aber nicht bearbeiten.


No