2012-08-16 2 views
1

J'ai un DataGridView dans une application WinForms et je veux que toutes les colonnes soient verrouillées à l'édition. Ce que j'ai pu réaliser avec le code suivant:Colonnes et lignes en lecture seule dans un DataGridView

foreach (DataGridViewColumn col in myGrid.Columns) 
{ 
    if (col.Name == "LockedColumn") 
    { 
     col.ReadOnly = false; 
    } 
    else 
    { 
     col.ReadOnly = true; 
    } 
} 

Cependant, je dois aussi un verrou conditionnel à cette colonne, en fonction des valeurs ailleurs dans chaque ligne. J'ai essayé le code suivant:

foreach (DataGridViewRow row in myGrid.Rows) 
{ 
    if ((bool)row.Cells["ConditionalColumn"].Value == false) 
    { 
     row.ReadOnly = false; 
    } 
    else 
    { 
     row.ReadOnly = true; 
    } 
}  

Cependant, cette verrouille toute la grille qui est pas ce que je veux. Ce que je veux peut être plus clair avec un exemple de table.

ColA ColB colC

row1 vrai valeur1

row2 faux valeur2

row3 vrai value3

Je veux les colonnes A & B verrouillé (lecture seule) dans leur intégralité, et la valeur par défaut pour que le Col C autorise l'édition, sauf si la valeur de la Colonne B est fausse. Par conséquent, dans l'exemple ci-dessus, seules value1 et value3 seraient éditables.

Cependant, je n'arrive pas à y parvenir, car comme indiqué ci-dessus, si je parcours les lignes avec une condition qui définit readonly sur false, tout est verrouillé.

+0

Est-ce le code de votre projet? Vous ne pouvez pas convertir une cellule dataagridview en booléen, ce code ne doit donc pas être compilé. En outre, il n'est pas très clair quel est votre problème. Voulez-vous dire que lorsque vous définissez une ligne en lecture seule, toute la grille devient en lecture seule? Cela n'arrive pas. –

+0

Pourquoi toutes les démarques - qu'est-ce qui ne va pas avec ma question? – PJW

+0

Je n'ai pas downvote - les gens surpris ont, mais peut-être le code non compilateur était la raison. J'espère que si vous publiez le code réel de votre projet, les gens supprimeront les downvotes. –

Répondre

0

Il était la ligne suivante qui était la question

row.ReadOnly = false; 

le changement à l'

row.Cells["colName"].ReadOnly = false; 

fonctionne comme intende d

2

Le code que vous avez montré ne doit pas compiler et n'examine pas correctement les valeurs dans les cellules booléennes d'un DataGridView.

Si vous changez votre code pour regarder les lignes à quelque chose comme le code ci-dessous alors vous devriez être en mesure de définir des lignes individuelles en lecture seule fonction de la colonne:

foreach (DataGridViewRow row in myGrid.Rows) 
{ 
    if (row.Cells["ConditionalColumn"].Value == null || (bool)row.Cells["ConditionalColumn"].Value == false) 
    { 
     row.ReadOnly = false; 
    } 
    else 
    { 
     row.ReadOnly = true; 
    } 
} 
Questions connexes