2010-06-04 17 views
6

Ich habe eine Datagridview auf einem Formular mit einigen Daten. Die 1. Spalte enthält eine Schaltfläche zum Löschen der Zeile. Wie können wir diese Schaltfläche oder die gesamte Zeile basierend auf einer Bedingung deaktivieren, sodass die Zeile nicht gelöscht werden kann?Datagridview, Schaltfläche/Zeile deaktivieren

+0

mögliche Duplikate von [Wie deaktiviere ich eine Knopfzelle in einem WinForms DataGrid?] (Http://stackoverflow.com/questions/86096/how-do-i-disable-a-button-cell-in-a- -winforms-datagrid) –

Antwort

3

Es gibt tatsächlich eine HowTo auf MSDN genau dies tun.

Bearbeiten: Weitere Vorschläge hinzugefügt.

Sie können die Schaltflächenspalte unsichtbar machen.

Oder wenn Sie nur das Löschen bestimmter Zeilen deaktivieren möchten, können Sie in jeder DataGridViewRow s Tag Eigenschaft den Wert true oder false eingeben. In Ihrer Ereignisbehandlungsroutine löschen Sie nur diejenigen, die auf false gesetzt sind. Sie könnten dies möglicherweise nur mit dem Ändern der Vordergrund- und Hintergrundfarben der Zelle kombinieren, um es deaktiviert aussehen zu lassen, diese Einfärbung könnte wahrscheinlich im CellFormatting Event-Handler oder etwas getan werden, so dass Sie nicht durchlaufen und es einfärben müssen von Hand.

+0

Ich habe das schon mal gesehen, aber es muss einen besseren Weg geben. – SoftwareGeek

+0

@BhejaFry: Nun, eine Menge dieses Codes soll es richtig aussehen lassen. Wenn Ihnen das nicht egal ist, gibt es noch viele andere Möglichkeiten, ich werde meiner Antwort ein paar Vorschläge hinzufügen, da es dort leichter zu lesen ist. –

8

Würdest du nur daran denken, die Knopfzelle in ein normales leeres Textfeld zu verwandeln, das deaktiviert ist?

Dim cell As DataGridViewButtonCell = dgv.row(x).cell(y) 
cell = New DataGridViewTextBoxCell() 
cell.value = String.Empty 
cell.ReadOnly = True 

Es verliert seine grenzte „Button“ Aussehen und vermischt sich mit dem Rest der Zellen in (vorausgesetzt, Sie verwenden in erster Linie die Standard DataGridViewTextBoxCells).

Hier ist das Äquivalent in C#, plus es Grays das Feld, um es so aussehen, read-only:

var cell = dgv[column, row] = new DataGridViewTextBoxCell(); 
cell.Value = ""; // ignored if this column is databound 
cell.ReadOnly = true; 
cell.Style.BackColor = Color.FromKnownColor(KnownColor.Control); 
3

Dies ist eine alte Post, aber ich möchte vorschlagen, was ich tue.

If conditionToDisable Then 
    Dim cell As New DataGridViewTextBoxCell 'Replace the ButtonCell for a TextCell' 
    cell.Value = valueForCell     'Set the value again' 
    grid.Rows(r).Cells(c) = cell    'Override the cell' 
End If 

Ich hoffe, das ist hilfreich.

Verwandte Themen