DataGridView: BackColor für ReadOnly.

26/09/2007 - 10:54 von WolfgangH | Report spam
Hallo Leute,

Tràgt der Anwedner in die 1. Spalte ein "J" ein, sollen die beiden rechten
Nachbarzellen editierbar sein - sonst nicht. Gleichzeitig sollte die
Editierbarkeit durch die BackColor erkennbar sein.

Meine Lösung (siehe unten) funktioniert aber nicht, weil die Farbanpassung
nicht sofort ausgeführt wird.
Wie sollte das richtig aussehen?

//ReadOnly setzen
private void dGV_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == 0)//nur gültig für Eintrag in 1. Spalte
{
if (dGV.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString() !=
"J")
{
dGV.Rows[e.RowIndex].Cells[e.ColumnIndex + 1].ReadOnly = true;
dGV.Rows[e.RowIndex].Cells[e.ColumnIndex + 2].ReadOnly = true;
}
else
{
dGV.Rows[e.RowIndex].Cells[e.ColumnIndex + 1].ReadOnly = false;
dGV.Rows[e.RowIndex].Cells[e.ColumnIndex + 2].ReadOnly = false;
}
}
}
//Farbe setzen -
private void dGV_CellFormatting(object sender,
DataGridViewCellFormattingEventArgs e)
{
if (dGV.Rows[e.RowIndex].Cells[e.ColumnIndex].ReadOnly == true)
dGV.Rows[e.RowIndex].Cells[e.ColumnIndex].Style.BackColor =
System.Drawing.SystemColors.Control;//grau
else
dGV.Rows[e.RowIndex].Cells[e.ColumnIndex].Style.BackColor =
System.Drawing.SystemColors.Window;//weiss
}

Besten Dank für Hinweise
Wolfgang
 

Lesen sie die antworten

#1 Frank Dzaebel
26/09/2007 - 13:34 | Warnen spam
Hallo Wolfgang,

Tràgt der Anwedner in die 1. Spalte ein "J" ein, sollen die beiden rechten
Nachbarzellen editierbar sein - sonst nicht. Gleichzeitig sollte die
Editierbarkeit durch die BackColor erkennbar sein.
Meine Lösung (siehe unten) funktioniert aber nicht, weil die Farbanpassung
nicht sofort ausgeführt wird. Wie sollte das richtig aussehen?



void personDataGridView_EditingControlShowing(object sender,
DataGridViewEditingControlShowingEventArgs e)
{
if (((DataGridView)sender).CurrentCell.ColumnIndex ! dataGridViewTextBoxColumn3.Index) return;
TextBox tb = e.Control as TextBox;
if (tb == null) return;
tb.TextChanged +=new EventHandler(tb_TextChanged);
}

void tb_TextChanged(object sender, EventArgs e)
{
DataGridViewTextBoxEditingControl tb (DataGridViewTextBoxEditingControl)sender;
if (tb.Text.ToLower() == "j")
{
DataGridView dgv = ((Panel)tb.Parent).Parent as DataGridView;
DataGridViewCell next = dgv[dgv.CurrentCell.
ColumnIndex + 1, dgv.CurrentRow.Index];
next.ReadOnly = true; dgv.InvalidateCell(next);
// und nextNext musst Du noch hinzufügen
}
}

und CellFormatting so, wie Du es hattest.


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

Ähnliche fragen