2010-04-02 3 views
0

je reçois la collection de webservice:DataGridView verrouillé. Linq est un problème?

var allPlaceHolders = 
    from ph in new MyService().GetPlaceHolders() 
    select new { Code = ph.Code, Name = ph.Name, Related = false }; 

dgPlaceHoldersAdd.DataSource = allPlaceHolders.ToList(); 

Designer.cs:

this.dgPlaceHoldersAdd.ColumnHeadersHeightSizeMode = 
    System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; 
this.dgPlaceHoldersAdd.Location = new System.Drawing.Point(3, 54); 
this.dgPlaceHoldersAdd.Name = "dgPlaceHoldersAdd"; 
this.dgPlaceHoldersAdd.RowHeadersVisible = false; 
this.dgPlaceHoldersAdd.Size = new System.Drawing.Size(286, 151); 
this.dgPlaceHoldersAdd.TabIndex = 15; 

Le problème est que je ne peux pas changer la valeur de la colonne checkBox.

I a permis AutoGeneratedColumns (En datagridview au début il n'y a aucune colonne)

AJOUTÉE:

Cela fonctionne drôle: Au premier ID de clic ne change pas la valeur de la colonne de cases à cocher. Au deuxième travail, puis commencer à bien fonctionner.

Mais ... quand je clique sur une autre ligne, puis une ligne avant le changement de ses valeurs

Il fonctionne comme RadioButton ...

private void dgPlaceHoldersAdd_CellMouseUp(object sender, DataGridViewCellMouseEventArgs e) 
     { 


      if (e.ColumnIndex == 2 && e.RowIndex > -1) 
      { 
       dgPlaceHoldersAdd.ReadOnly = false; 
       dgPlaceHoldersAdd.CurrentRow.Cells[2].ReadOnly = false; 

       //dgPlaceHoldersAdd.EndEdit(); 

      } 

     } 

Répondre

3

Vous créez un objet anonyme dans votre requête LINQ. Les classes C# générées derrière la couverture sont immuables (= readonly). Cela signifie que votre DataGridView ne peut pas changer sa valeur. Essayez de créer un objet personnalisé qui est modifiable et créez-le à partir de votre requête LINQ.

Questions connexes