Sans expliquer tout le contexte, mon problème est essentiellement le suivant:
J'ai un datagridview sur un formulaire Windows qui est lié à un DbSet Entity Framework: dbSet.Local.ToBindingList()
.
Si je définis la propriété ReadOnly
du datagridview sur true (en mode design), et que j'ai ensuite cette instruction dans mon code:
myDataGridView.Rows[rowIndex].ReadOnly = false;
Il passe directement sans changer la valeur! (Et non, ma source de données n'est pas en lecture seule.)
Parcourir les cellules de la ligne et définir la propriété ReadOnly de chaque cellule individuellement ne fonctionne pas non plus:
foreach (DataGridViewCell cell in myDataGridView.Rows[rowIndex].Cells)
{
cell.ReadOnly = false;
}
.ReadOnly - Obtient ou définit une valeur indiquant si l'utilisateur peut modifier les cellules du contrôle DataGridView.
Mais on dirait qu'il ne peut pas définir pour une raison quelconque.
Y a-t-il une raison pour laquelle cela arriverait? Je pensais peut-être que la propriété ReadOnly
du datagridview annulerait les modifications apportées à des lignes/cellules spécifiques (c'est-à-dire que tout le formulaire doit être en lecture seule ou non), mais apparemment cela a fonctionné pour quelqu'un...
Il y a d'autres moyens d'atteindre mon objectif final, mais j'aimerais savoir pourquoi je ne peux pas changer cette propriété, car cela serait la solution la plus simple pour ma situation.
ÉDIT:
Laissez-moi essayer de clarifier ma question:
Encore une fois, je suis conscient qu'il existe d'autres moyens d'atteindre mon objectif final, mais j'aimerais une réponse à ce problème:
Désolé pour l'exemple rudimentaire, mais pour reproduire facilement le problème, créez une application WinForm, ajoutez-y un datagridview, et collez ce code dans votre projet:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
dataGridView1.ReadOnly = true;
string[] row1 = new string[] { "test", "test1" };
string[] row2 = new string[] { "test2", "test3" };
string[] row3 = new string[] { "test4", "test5" };
dataGridView1.Columns.Add("1", "1");
dataGridView1.Columns.Add("2", "2");
dataGridView1.Rows.Add(row1);
dataGridView1.Rows.Add(row2);
dataGridView1.Rows.Add(row3);
dataGridView1.Rows[1].ReadOnly = false;
}
}
Si vous placez un point d'arrêt sur la dernière ligne, et que vous le suivez, vous verrez que la propriété ReadOnly NE CHANGE PAS! Pourquoi??