2009-05-29 7 views
0

J'ai une classe GridView étendue, GridViewEx, qui hérite de la grille de base ASP.NET. Je remplace la méthode CreateColumns pour intercepter la collection de colonnes et injecter ma propre colonne, contenant un CheckBoxField modifié.La grille personnalisée multisélect brise les commandes Row Update

(Sidenote:. J'ai essayé à la recherche d'une autre méthode de stockage et de mise à jour les lignes ont été sélectionnées et simplement en cochant la case comme un mécanisme d'affichage, mais finalement la case à cocher était la méthode la plus simple pour manipuler tout)

Le CheckBoxField a sa propriété ReadOnly définie sur true lors de sa création (et elle reste vraie lorsqu'elle est ajoutée à la collection de colonnes), ce qui devrait l'empêcher d'être transmis en tant que paramètre pour les demandes de mise à jour par rapport à la source de données gridview.

Comme vous pouvez le déduire, cela ne se produit pas. Lorsque j'essaie d'effectuer une modification et une mise à jour de ligne, j'obtiens un avertissement "Trop de paramètres" avec un seul paramètre qui n'a pas de nom. Si je désactive la fonction multisélect, cela disparaît. Donc, je sais que mon checkboxfield n'est pas traité comme un champ Readonly. Mais je ne sais pas comment le réparer!

Des idées sur où, quand et comment j'ai besoin de configurer ce champ pour qu'il ne soit pas transmis automatiquement en tant que paramètre à mes mises à jour?

Répondre

0

Ok, compris. J'ai également eu un CheckBoxField personnalisé qui remplace InitializeDataCell et écrit dans ma propre case à cocher. J'avais besoin d'ajouter une vérification supplémentaire pour désactiver le champ lors des modifications si Readonly est défini. Cela semble avoir résolu ce problème. J'espère que cela aidera quelqu'un d'autre qui pourrait faire des modifications personnalisées de GridView.

internal class InputCheckBoxField : CheckBoxField 
    { 
     //... Some boilerplate for ID and other properties here 

     protected override void InitializeDataCell(DataControlFieldCell cell, DataControlRowState rowState) 
     { 
      base.InitializeDataCell(cell, rowState); 

      if (cell.Controls.Count == 0) 
      { 
       CheckBox chk = new CheckBox(); 
       chk.ID = CheckBoxID; 
       chk.AutoPostBack = true; 
       cell.Controls.Add(chk); 

       //This was the needed check 
       if(ReadOnly && rowState == DataControlRowState.Edit) 
        chk.Enabled = false; 
      } 
     } 
    } 
Questions connexes