Wie kann ich eine Tabelle Hintergrund programmatisch während einer asp.net Seite ausgeführt wird?

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

  •  22-07-2019
  •  | 
  •  

Frage

Ich habe eine aspx-Seite, die eine Hintergrundfarbe als Standard hat. Ich muss in der Lage, es programmatisch zu ändern, wenn eine bestimmte Option eines Optionsfeld ausgewählt ist. Ich habe versucht, das ID-Feld der Tabelle Einstellung, aber ich kann es nicht hinter Datei in meinem C # -Code zugreifen zu sein scheinen.

Meine ursprüngliche Tabelle ist:

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

Ich habe nicht die ID in meinem intellisense sehen, though.

Bearbeiten
Nun, da ich meinen Tisch in meinem Code hinter sehen kann, versuche ich, um tatsächlich die Hintergrundfarbe zu ändern. Hier ist der Code für meine Radiobuttonlist:

<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>

Ich schlage ich den Breakpoint in der Event-Handler festgelegt, aber die Hintergrundfarbe ändert sich nicht auf Postbacks. Wenn das gewählte Element Anhängig ist, dann will ich anders die Hintergrundfarbe, um etwas zu ändern. Wenn sie auf das Optionsfeld geöffnet oder geschlossen zu ändern, dann möchte ich die Hintergrundfarbe stellen Sie sicher, ist die Standardeinstellung.

Edit 2:
Der Code in meinem Event-Handler ist sehr einfach:

if (rdoStatus.SelectedValue == "181003")
{
  tblSheet.BgColor = "#ff9a9a";
}
else
{
  tblSheet.BgColor = "#99ccff";
}
War es hilfreich?

Lösung 3

Ich habe es funktioniert!
Ich habe die Tabelle auf den folgenden (I entfernt, um die Hintergrundfarbe):

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

Dann in meinem Code hinter mir die Hintergrundfarbe in der Page_Load gesetzt, wenn es nicht ein Postbacks:

tblSheet.Bgcolor = "#99ccff";

Voila! Die Radiobuttonlist und Event-Handler sind die gleichen wie in der Frage. Die Postbacks veränderte sich die Farbe zurück zum Original. Vielen Dank für die Hilfe aller!

Andere Tipps

Platz runat="server" in der Tabelle Tag

Wenn Sie das getan haben, werden Sie auch die Tabelle programmatisch zuzugreifen.

Um die Hintergrundfarbe direkt zu ändern, versuchen Sie:

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

Wenn Sie Stylesheets verwenden Sie können, versuchen Sie dies:

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

Triggern Sie die Postbacks, die diese Änderung direkt aus dem Radio-Button machen?
Ist das das Einzige, was in dieser Zeit verändert?

Wenn die Antwort auf diese beiden „Ja“ ist, dann sollten Sie stattdessen tun dies alles in Javascript betrachten und Überspringen der Postbacks vollständig:

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

Die hier Argumentation ist, dass Postbacks unglaublich langsam ist im Vergleich zu halten alles auf dem Client, und sie schadeten auch der Fähigkeit Ihres Web-App als leicht zu skalieren (mehr Arbeit auf dem Server ist, natürlich, schlecht für die Skalierbarkeit). So ist es schneller für den Benutzer und weniger Arbeit für den Server.

Sie müssen jedoch vorsichtig sein, auch nicht verlieren Funktionalität für Benutzer, die JavaScript deaktiviert, wenn die Arbeit aus dem Server zu verschieben. Aber wenn das Postbacks bereits von Ihrem Radioknopf ausgelöst wurde dann waren Sie bereits abhängig von Javascript für diese Funktion.

Zunächst einmal können Sie sehen, die Tabelle nicht, weil es keine runat = „server“ -Attribut der Tabelle ist, die Sie ID, die zweite von allen sehen ermöglicht es Ihnen, wenn Sie nicht in der Lage sein, auch eine Farbe der Tabelle zu ändern, sehen die Tabelle in Ihrem Code. Auch wenn Sie die Tabellenattribute zugreifen und eine Farbe festgelegt wird es nicht helfen, entweder, weil Sie müssen wieder posten um die Änderung zu sehen.

Was Sie tun müssen, ist Update-Panel zu verwenden und eine Variable statt # FF9900, auf diese Weise Standardfarbe ist rot zu verwenden oder welche Farbe es ist, und beim Check Falle Checkbox werden Sie den Wert auf Grün oder eine andere Farbe ändern .

Wie Joel gesagt, ist JavaScript eine bessere Lösung, wenn Sie Farben ändern müssen, aber, und wenn Sie Ihre Tabelle in ein Server-Steuerelement Transformation (mit runat = Server in der Tabelle oder einem anderen Server Control) vergessen Sie nicht, eine zu verwenden, eingebettete Code-Block in getElementById die Tabelle ID abzurufen, weil ASP.NET-IDs umbenennen, wenn sie die Seite macht.

In Joels Beispiel wird es wie folgt aussehen:

<input type="radio" value="..." name="..." id="..."    onclick="document.getElementById('<% =tblSheet.ClientID%>').style.backgroundColor = '#99ccff';" />
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top