foreach (DataGridViewRow row in dataGridView1.Rows) {
if (!isDeaktiviert) {
row. ????????
}
}
Alexander
> ich will in einem DataGridView einzelne Zeilen deaktivieren,
> d.h sichtbar (grau) und nicht auswählbar.
> Wie kann man das Deaktivieren realisieren?
dgvClientStatus.Rows[1].ReadOnly = true;
dgvClientStatus.Rows[1].DefaultCellStyle.BackColor =
Color.LightGray;
Sei Dir klar, dass sich Zeilen etwa durch Sortierung
auch ändern können.
Ansonsten definiere auswählbar ....
vielleicht: wenn man mit der Maus drauf-klickt, soll
die Bindungs-Position nicht wechseln und die Zeile
darf nicht selektiert werden?
ciao Frank
--
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET
Alexander
> ja, die Zeile darf nicht selektierbar sein.
ok, daf�r gibt es keine direkte Eigenschaft im DataGridView.
Man kann die Funktionalit�t aber pragmatisch erreichen.
Zum Beispiel etwas wie:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
DataGridView dgv = new DataGridView();
Button btnDeaktivierung = new Button();
private void Form1_Load(object sender, EventArgs e)
{
Controls.Add(btnDeaktivierung);
btnDeaktivierung.Text = "Deaktivieren";
Controls.Add(dgv); dgv.Top = 25;
dgv.Width = Width - 20; dgv.Height = Height - 70;
dgv.Anchor = AnchorStyles.Left | AnchorStyles.Right |
AnchorStyles.Bottom | AnchorStyles.Top;
btnDeaktivierung.Click += BtnDeaktivierung_Click;
DataTable dt = new DataTable();
for (int i = 0; i < 3; i++) dt.Columns.Add("Spalte" + i);
for (int i = 0; i < 20; i++)
dt.Rows.Add("Eins" + i, "Zwei" + i, "Drei" + i);
dgv.DataSource = dt; dgv.KeyDown += Dgv_KeyDown;
dgv.MouseDown += Dgv_MouseDown;
dgv.SelectionChanged += Dgv_SelectionChanged;
}
void BtnDeaktivierung_Click(object sender, EventArgs e)
{
DeaktiviereDgvZeile(5); // bzw. .. (Dein Handling)
}
void DeaktiviereDgvZeile(int zeilenNr)
{
deinDeaktivierterZeilenIndex = zeilenNr;
DataGridViewRow disableRow = dgv.Rows[zeilenNr];
disableRow.DefaultCellStyle.BackColor = SystemColors.ControlLight;
disableRow.ReadOnly = true;
}
int deinDeaktivierterZeilenIndex = -1;
private Keys lastKey = Keys.Up;
private void Dgv_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyData == Keys.Up || e.KeyData == Keys.Down)
lastKey = e.KeyData;
}
private void Dgv_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
lastKey = Keys.Down;
}
private void Dgv_SelectionChanged(object sender, EventArgs e)
{
CurrencyManager cm = BindingContext[dgv.DataSource] as
CurrencyManager;
int rowIndex = cm.Position;
if (rowIndex == deinDeaktivierterZeilenIndex)
{
if (lastKey == Keys.Down)
{
if (rowIndex < dgv.Rows.Count - 1)
dgv.CurrentCell = dgv.Rows[rowIndex + 1].Cells[0];
}
if (lastKey == Keys.Up && rowIndex > 0)
dgv.CurrentCell = dgv.Rows[rowIndex - 1].Cells[0];
Alexander
> Hallo Frank,
> danke f�r deine Hilfe. Schade es es diese doch sicherlich oft ben�tigte
> Eigenschaft nicht gibt.
von der Anzahl der Fragen diesbzgl. und meiner eigenen
Erfahrung tats�chlich sehr selten.
Es ist auch unangenehm f�r den User irgendwo nicht
drauf-klicken zu k�nnen - bzw. dass die Selektion dann
unerwartet auf eine andere Zeile springt.
Aber gut, wir haben dann schon mal einen, der es ben�tigt :-)