Comment définir un fond de table par programme lors de l'exécution d'une page asp.net?

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

  •  22-07-2019
  •  | 
  •  

Question

J'ai une page aspx qui a une couleur d'arrière-plan par défaut. Je dois pouvoir le modifier par programme lorsqu'une certaine option d'un bouton radio est sélectionnée. J'ai essayé de définir le champ ID de la table, mais je n'arrive pas à y accéder dans mon code C # derrière le fichier.

Ma table d'origine est:

<table id="tblSheet" runat="server" style="border-color: #FF9900; border-style: solid; 
border-width:  thin; width:100%; background-color: #99ccff;" cellspacing="4" 
cellpadding="1">

Je ne vois pas l'identifiant dans mon intellisense, cependant.

Modifier:
Maintenant que je peux voir ma table dans mon code derrière, j'essaie de changer la couleur de fond. Voici le code de ma liste de radiobutton:

<asp:RadioButtonList ID="rdoStatus" runat="server" AutoPostBack="true"
RepeatDirection="Horizontal" Visible="true"   
OnSelectedIndexChanged="rdoStatus_OnSelectionChanged">
<asp:ListItem Value="181001" Text="Open"/>
<asp:ListItem Value="181002" Text="Closed" />
<asp:ListItem Value="181003" Text="Pending" />
</asp:RadioButtonList>

Je frappe le point d'arrêt que j'ai défini dans le gestionnaire d'événements, mais la couleur d'arrière-plan ne change pas à la publication. Si l'élément sélectionné est En attente, je souhaite modifier la couleur d'arrière-plan. S'ils modifient le bouton radio sur Ouvert ou fermé, je veux m'assurer que la couleur d'arrière-plan est la couleur par défaut.

Modifier 2:
Le code dans mon gestionnaire d'événements est très simple:

if (rdoStatus.SelectedValue == "181003")
{
  tblSheet.BgColor = "#ff9a9a";
}
else
{
  tblSheet.BgColor = "#99ccff";
}
Était-ce utile?

La solution 3

Je le fais fonctionner!
J'ai changé le tableau comme suit (j'ai supprimé la couleur de fond):

<table id="tblSheet" runat="server" style="border-color: #FF9900; border-style: solid; 
border-width: thin; width:100%;" cellspacing="4" cellpadding="1">

Ensuite, dans mon code, la couleur d'arrière-plan est placée dans le Page_Load lorsque pas une publication (postback):

tblSheet.Bgcolor = "#99ccff";

voila! Le radiobuttonlist et le gestionnaire d'événements sont les mêmes que dans la question. La publication était en train de changer la couleur à l'original. Merci pour l'aide de tous!

Autres conseils

Placez runat = " serveur & <; code> dans la balise de la table

Une fois que vous avez terminé, vous pourrez accéder à la table par programmation.

Pour changer directement la couleur de fond, essayez:

if (rdoStatus.SelectedValue == "181003")
    {
      tblSheet.Style.Add("background-color", "#ff9a9a");
    }
    else
    {
      tblSheet.Style.Add("background-color", "#99ccff");
    }

Si vous utilisez des feuilles de style, essayez ceci:

if (rdoStatus.SelectedValue == "181003")
{
  tblSheet.CssClass = "default_color"
}
else
{
  tblSheet.CssClass = "other color"
}

Déclenchez-vous la publication qui effectuera cette modification directement à partir du bouton radio?
Est-ce la seule chose qui change en ce moment?

Si la réponse à ces deux questions est "oui", vous devriez plutôt envisager de faire tout cela en javascript et de sauter entièrement la publication:

<input type="radio" value="..." name="..." id="..."
    onclick="document.getElementById('tblSheet').style.backgroundColor = '#99ccff';" />

Le raisonnement est que les publications sont incroyablement lentes par rapport au fait de tout conserver sur le client. Elles nuisent également à la capacité de votre application Web à être mise à l’échelle aussi facilement (davantage de travail sur le serveur est, bien sûr, mauvais pour l’évolutivité). C'est donc plus rapide pour l'utilisateur et moins de travail pour votre serveur.

Cependant, vous devez faire attention à ne pas perdre la fonctionnalité pour les utilisateurs dont le javascript est désactivé lors du transfert de travaux hors du serveur. Mais si cette publication a déjà été déclenchée par votre bouton radio, vous étiez déjà dépendant de javascript pour cette fonctionnalité.

Tout d’abord, vous ne pouvez pas voir la table car il n’existe pas de runat = " serveur " attribut de table qui vous permet de voir l'ID, en second lieu vous ne pourrez pas changer une couleur de la table même si vous voyez la table dans votre code. Même si vous allez accéder aux attributs de la table et y définir une couleur, cela ne vous aidera pas non plus, car vous devrez rediffuser pour voir le changement.

Ce que vous devez faire est d'utiliser le panneau de mise à jour et d'utiliser une variable au lieu de # FF9900. Ainsi, la couleur par défaut sera le rouge ou quelle que soit sa couleur. Si vous cochez cette case, vous affectez la valeur au vert ou à une autre couleur. .

Comme le dit Joel, JavaScript est une meilleure solution si vous devez seulement changer de couleur mais si vous transformez votre table en contrôle de serveur (utilisez runat = server dans votre table ou un autre contrôle de serveur), n'oubliez pas d'utiliser un Un bloc de code incorporé dans getElementById pour récupérer l'ID de la table car l'ID de renommage ASP.NET est lors du rendu de la page.

Dans l'exemple de Joel, cela ressemblera à:

<input type="radio" value="..." name="..." id="..."    onclick="document.getElementById('<% =tblSheet.ClientID%>').style.backgroundColor = '#99ccff';" />
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top