Modification par programme En Mode lecture seule sur DataGridView Lignes

Sans expliquer le contexte, mon problème est essentiellement ceci:

J'ai un datagridview sur un Formulaire Windows, qui est lié à une Entité Cadre DbSet: dbSet<TEntity>.Local.ToBindingList().

Si j'ai mis le datagridview est ReadOnly true à la propriété (en mode création), puis ont cette déclaration dans mon code:

  myDataGridView.Rows[rowIndex].ReadOnly = false;

Il suit à droite à travers sans modification de la valeur! (Et non, ma source de données est pas en lecture seule.)

En boucle à travers les cellules de la ligne et la définition de chaque cellule de la propriété ReadOnly individuellement ne fonctionne pas non plus:

  foreach (DataGridViewCell cell in myDataGridView.Rows[rowIndex].Cells)
  {
      cell.ReadOnly = false;
  }

.ReadOnly - Gets or sets a value indicating whether the user can edit the cells of the DataGridView control. Mais il agit comme il ne peut pas ensemble pour une raison quelconque.

Est-il une raison que cela arriverait? Je pensais que peut-être le datagridview est ReadOnly bien ne perdiez tous les changements apportés à des lignes spécifiques/cellules (ie. le ensemble de la forme doit être en lecture seule ou non), mais apparemment cette travaillé pour quelqu'un...

Il y a d'autres façons d'accomplir mon objectif final, mais je voudrais savoir pourquoi je ne peux pas modifier cette propriété, ce qui serait la solution la plus simple pour ma situation.


EDIT:

Je vais essayer de préciser ma question:

Encore une fois, je suis conscient qu'il existe d'autres façons d'accomplir mon objectif final, mais voudrais une réponse à cette question:

Désolé pour la primitive exemple, mais facilement reproduire le problème, créez une application WinForm, jeter un datagridview sur elle, et passé 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 mettez un point d'arrêt sur la dernière ligne, et pas à travers elle, vous verrez que la propriété En lecture seule NE change PAS! Pourquoi??

  • Lorsque votre code est-derrière le code en cours d'exécution, et quand vous le réglage de la GridView propriété ReadOnly de vrai. Êtes-vous sûr qu'ils sont qui se passe dans le bon ordre?
  • J'ai mis le GridView propriété ReadOnly à vrai du point de vue design (pas en cours d'exécution). Et le code est en cours d'exécution sur un événement buttonClick.
  • Si l'événement buttonClick est à l'origine d'une publication, droit? Peut-être que si vous définissez le contrôle GridView propriété ReadOnly de vrai dans le PageLoad()?
  • Je m'excuse, j'aurais du précisé que je suis en train de travailler avec les WinForms. L'événement buttonClick est l'ajout d'un nouvel élément à la source de données que le contrôle gridview est lié à (pour l'essentiel, par programme de l'ajout d'une ligne). J'ai essayé le réglage de la propriété ReadOnly sur le FormLoad événement, mais il ne semble pas faire une différence soit.
  • OK, donc votre liaison de données qui se passe avant ou après vous tentez de définir la propriété sur la cellule?
  • Je me dois de préciser que je voulais dire "j'ai essayé de réglage de la propriété ReadOnly of the datagridview to "true" sur le FormLoad événement." (puis, plus tard, essayez de définir une ligne à "false") de La liaison de données qui se passe sur le formulaire de création, bien avant que je tente de définir la propriété ReadOnly sur la ligne/cellule
  • voir ce lien : stackoverflow.com/questions/9268763/...
  • Oui, mais vous avez dit que l'événement buttonClick est l'ajout d'un nouvel élément à la source de données, de sorte que la liaison de données est à nouveau en cours, à droite? Ou pas?
  • merci pour le lien, on dirait que quelqu'un d'autre a couru dans le même problème. .BeginEdit va être mon prochain choix si je ne peux pas obtenir une réponse ici... Il serait viable (mais plus compliqué) de la solution, mais je voudrais vraiment voudrais savoir pourquoi je ne peut pas définir le ReadOnly de la propriété.
  • J'ai peut être tort, mais comme je suis en utilisant un [BindingSource](http://msdn.microsoft.com/en-us/library/xxxf124e.aspx), je suis sûr que la liaison de données ne permet pas de "se reproduire" quand je ajouter quelque chose à la source de données. Quelqu'un me corrige si je me trompe?
  • Vous pourriez bien être à droite, James. Je n'ai aucune expérience avec Entity Framework. C'est juste lorsque je regarde en premier. Assurez-vous que votre ajout des données n'est pas la cause de votre ReadOnly réglage sur la cellule pour être remplacé en raison de la ReadOnly réglage sur la grille. Bonne chance!
  • bonjour @JamesEkema si vous n'avez pas l'esprit. où avez-vous obtenu ce code dbSet<TEntity>.Local.ToBindingList()? parce qu'en fait, par défaut, le DataGridView les propriétés de la colonne est définie sur false. Pouvez-vous partager vos codes au format réel? 🙂
  • ok, j'ai trouvé que vous êtes en utilisant Entity Framework par DbContext je suis de droite?
  • Bonjour, vous avez raison, je suis en utilisant EF avec DbContext... désolé si je n'ai pas été bien clair... je ne pense pas que EF a rien à voir avec mon problème tho, j'essayais juste de donner un peu de contexte... ou peut-être il fait? Aussi, je ne suis pas tout à fait sûr de ce que vous entendez par by default the DataGridView column properties is set to false?
  • désolé pour ça, je veux dire la DataGridView Column par défaut readonly = false, de toute façon en ce qui concerne votre problème, pouvez-vous partager comment avez-vous l'utiliser? dbSet<TEntity>.Local.ToBindingList() ou l'ensemble des codes.?
  • Veuillez voir mon edit: EF n'a rien à voir avec mon problème... (Cependant, pour répondre à votre question, dbSet<TEntity>.Local.ToBindingList() est lié à un BindingSource, qui est ensuite lié à mon DataGridView)

InformationsquelleAutor sǝɯɐſ | 2012-12-21