ASP.NET: valeur GridView définie sur null lorsque la colonne n'est pas visible

StackOverflow https://stackoverflow.com/questions/416861

  •  03-07-2019
  •  | 
  •  

Question

J'utilise une liste d'objets comme source de données de mon GridView et lorsque je règle les colonnes pour qu'elles ne soient pas visibles, les mises à jour échouent car la valeur de ces colonnes est remplacée par la valeur null (et la colonne n'autorise pas les valeurs NULL). . Les valeurs existent lorsque les colonnes sont visibles, mais je ne souhaite vraiment pas les afficher, car ce sont pour la plupart des colonnes d'ID que l'utilisateur n'a pas vraiment besoin de voir.

EDIT: J'ai essayé l'option de champ masqué mais la valeur est toujours définie sur null. J'ai consulté la source de la page et le champ caché existe avec la valeur appropriée ...

Était-ce utile?

La solution

J'ai trouvé cette solution pour simuler des colonnes cachées dans .Net 2.0:

Implémentez l'événement GridView.RowCreated.

protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
{
    e.Row.Cells[1].Visible = false;
    e.Row.Cells[2].Visible = false;
}

Voici le lien: http://www.beansoftware.com/ASP.NET-Tutorials/GridView -Hidden-Column.aspx

J'imagine qu'en 2.0, lorsqu'une colonne n'est pas visible, la liaison de données échoue pour cette colonne, mais cette méthode est masquée après l'établissement du lien, ce qui trompe le système (?).

Autres conseils

Microsoft recommande d'utiliser DataKeyNames. propriété du contrôle GridView.

Au lieu d'utiliser code-behind pour masquer certaines colonnes, vous pouvez simplement supprimer les champs liés du GridView et les spécifier dans la propriété DataKeyNames:

<asp:GridView ID="GridView1" runat="server" 
        DataKeyNames="SalesOrderID,SalesOrderDetailID"
        DataSourceID="LinqDataSource1">

De cette façon, les champs ne seront pas visibles par l'utilisateur, mais GridView sait conserver les valeurs pour la mise à jour, etc.

Si vous ne le faites pas déjà, envisagez d'utiliser des colonnes de modèle pour vos données, puis effectuez un "manuel". liaison de données ("inline" ou dans la page de code derrière à l'aide de l'événement RowDataBound). De cette façon, vous pouvez tester DBNull et ignorer simplement de mettre une valeur dans la colonne si la valeur est NULL. Cela permettra également aux colonnes d'être correctement cachées.

Vous pouvez le faire avec des champs cachés pour les valeurs que vous ne voulez pas afficher. De cette façon, vous pouvez toujours utiliser la même liaison de données et les autres fonctions que vous le faites aujourd'hui.

Lorsqu'un champ de GridView est rendu invisible, les valeurs de ses cellules ne sont pas plus accessibles, ni nulles ni vides.

Pour résoudre ce problème, il vous suffit d'affecter des noms de colonne (champs masqués) à la propriété DataKeyNames de GridView en effectuant DataKeyNames = "quotName, nomcolone2, colName3", .

Accédez ensuite à leurs valeurs de cellule en tant que cellValue = GridView1.DataKeys [0] ["quot".]. ToString ();

J'ai écrit un simple message expliquant la solution à votre problème à l'adresse ici .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top