Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Wie im DataGridView einzelne Zeilen deaktivieren?

171 views
Skip to first unread message

Alexander Richter

unread,
May 12, 2010, 5:35:56 AM5/12/10
to
Hallo,
ich will in einem DataGridView einzelne Zeilen deaktivieren,
d.h sichtbar (grau) und nicht ausw�hlbar.
Wie kann man das Deaktivieren realisieren?

foreach (DataGridViewRow row in dataGridView1.Rows) {
if (!isDeaktiviert) {
row. ????????
}
}


Alexander

FrankDzaebel

unread,
May 12, 2010, 9:28:13 AM5/12/10
to
Hallo 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 Richter

unread,
May 12, 2010, 9:44:01 AM5/12/10
to
Hallo Frank,
ja, die Zeile darf nicht selektierbar sein.
Mit .ReadOnly = true erreicht man dies nicht.

Alexander

Frank Dzaebel

unread,
May 12, 2010, 6:08:23 PM5/12/10
to
Hallo 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 Richter

unread,
May 17, 2010, 11:54:02 AM5/17/10
to
Hallo Frank,
danke f�r deine Hilfe. Schade es es diese doch sicherlich oft ben�tigte
Eigenschaft nicht gibt.

Alexander

Frank Dzaebel

unread,
May 17, 2010, 4:06:44 PM5/17/10
to
Hallo 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 :-)

0 new messages