Forums Neueste Beiträge
 

DataGridView Checkboxen ausblenden

23/12/2009 - 19:49 von ChristianH | Report spam
Hi,

ich habe ein DataGridView mit Columns des Typs DataGridViewCheckBoxColumn.
Das Grid hat eine feste Zeilenanzahl von drei. Die Checkboxen sollen nur in
der ersten Zeile erscheinen. Zeile 2 und 3 soll leer bleiben. Die Checkbox zu
disablen ist nur eine Notlösung.

Wie kann ich die Checkboxen entfernen?

Danke und viele Grüße
Christian
 

Lesen sie die antworten

#1 Frank Dzaebel
24/12/2009 - 07:48 | Warnen spam
Hallo Christian,

ich habe ein DataGridView mit Columns des Typs
DataGridViewCheckBoxColumn.
Das Grid hat eine feste Zeilenanzahl von drei. Die Checkboxen sollen
nur in
der ersten Zeile erscheinen. Zeile 2 und 3 soll leer bleiben. Die
Checkbox zu
disablen ist nur eine Notlösung.



Hier eine allgemeine Lösung dafür, die über eine
benutzerdefinierte DataGridViewCheckBoxColumn
mit eigenem DataGridViewCheckBoxCell-CellTemplate arbeitet,
dem eine zusàtzliche Enabled-Eigenschaft zugefügt wird.

partial class Form2 : Form
{
private DataGridView dgv = new DataGridView();

public Form2()
{
this.AutoSize = true;
this.Load += new EventHandler(Form2_Load);
}

public void Form2_Load(object sender, EventArgs e)
{
DataGridViewCheckBoxColumn col0 new DataGridViewCheckBoxColumn();
DataGridViewDisableCheckBoxColumn col1 new DataGridViewDisableCheckBoxColumn();
col0.Name = "Hier Klicken"; col1.Name = "CheckBoxen";
dgv.Columns.Add(col0); dgv.Columns.Add(col1);
dgv.RowCount = 4; dgv.AutoSize = true;
dgv.AllowUserToAddRows = false;
dgv.ColumnHeadersDefaultCellStyle.Alignment DataGridViewContentAlignment.MiddleCenter;

for (int i = 0; i < dgv.RowCount; i++)
dgv.Rows[i].Cells["CheckBoxen"].Value = true;

dgv.CellValueChanged + new DataGridViewCellEventHandler(Dgv_CellValueChanged);
dgv.CurrentCellDirtyStateChanged + new EventHandler(dgv_CurrentCellDirtyStateChanged);
dgv.CellClick + new DataGridViewCellEventHandler(Dgv_CellClick);

this.Controls.Add(dgv);
}

void dgv_CurrentCellDirtyStateChanged(object sender,
EventArgs e)
{
if (dgv.IsCurrentCellDirty)
dgv.CommitEdit(DataGridViewDataErrorContexts.Commit);
}

public void Dgv_CellValueChanged(object sender,
DataGridViewCellEventArgs e)
{
if (dgv.Columns[e.ColumnIndex].Name == "Hier Klicken")
{
DataGridViewDisableCheckBoxCell CheckBoxCell (DataGridViewDisableCheckBoxCell)dgv.
Rows[e.RowIndex].Cells["CheckBoxen"];

DataGridViewCheckBoxCell checkCell (DataGridViewCheckBoxCell)dgv.
Rows[e.RowIndex].Cells["Hier Klicken"];
CheckBoxCell.Enabled = !(Boolean)checkCell.Value;

dgv.Invalidate();
}
}

void Dgv_CellClick(object sender,
DataGridViewCellEventArgs e)
{
if (dgv.Columns[e.ColumnIndex].Name == "CheckBoxen")
{
DataGridViewDisableCheckBoxCell CheckBoxCell (DataGridViewDisableCheckBoxCell)dgv.
Rows[e.RowIndex].Cells["CheckBoxen"];

if (CheckBoxCell.Enabled)
{
MessageBox.Show(dgv.Rows[e.RowIndex].
Cells[e.ColumnIndex].Value.ToString() +
" ist aktiviert");
}
}
}
}

public class DataGridViewDisableCheckBoxColumn :
DataGridViewCheckBoxColumn
{
public DataGridViewDisableCheckBoxColumn()
{
this.CellTemplate = new DataGridViewDisableCheckBoxCell();
}
}

public class DataGridViewDisableCheckBoxCell :
DataGridViewCheckBoxCell
{
public bool Enabled { get; set; }

public override object Clone()
{
DataGridViewDisableCheckBoxCell cell (DataGridViewDisableCheckBoxCell)base.Clone();
cell.Enabled = this.Enabled;
return cell;
}

public DataGridViewDisableCheckBoxCell()
{
this.Enabled = true;
}

protected override void Paint(Graphics graphics,
Rectangle clipBounds, Rectangle cellBounds, int rowIndex,
DataGridViewElementStates elementState, object value,
object formattedValue, string errorText,
DataGridViewCellStyle cellStyle,
DataGridViewAdvancedBorderStyle advancedBorderStyle,
DataGridViewPaintParts paintParts)
{
if (!this.Enabled)
{
if ((paintParts & DataGridViewPaintParts.Background) = DataGridViewPaintParts.Background)
{
SolidBrush cellBackground new SolidBrush(cellStyle.BackColor);
graphics.FillRectangle(cellBackground, cellBounds);
cellBackground.Dispose();
}

if ((paintParts & DataGridViewPaintParts.Border) = DataGridViewPaintParts.Border)
{
PaintBorder(graphics, clipBounds, cellBounds, cellStyle,
advancedBorderStyle);
}
}
else
{
base.Paint(graphics, clipBounds, cellBounds, rowIndex,
elementState, value, formattedValue, errorText,
cellStyle, advancedBorderStyle, paintParts);
}
}
}


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen