Come imposto uno sfondo di tabella a livello di codice durante l'esecuzione di una pagina asp.net?

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

  •  22-07-2019
  •  | 
  •  

Domanda

Ho una pagina aspx che ha un colore di sfondo come predefinito. Devo essere in grado di cambiarlo a livello di codice quando viene selezionata una determinata opzione di un pulsante di opzione. Ho provato a impostare il campo ID della tabella, ma non riesco ad accedervi nel mio codice C # dietro il file.

La mia tabella originale è:

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

Non vedo l'id nel mio intellisense, però.

Modifica
Ora che vedo la mia tabella nel mio codice dietro, sto cercando di cambiare effettivamente il colore di sfondo. Ecco il codice per la mia 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>

Sto colpendo il punto di interruzione impostato nel gestore eventi, ma il colore di sfondo non cambia al postback. Se l'elemento scelto è In sospeso, allora voglio cambiare il colore di sfondo in qualcosa di diverso. Se cambiano il pulsante di opzione in Aperto o Chiuso, allora voglio assicurarmi che il colore di sfondo sia quello predefinito.

Modifica 2:
Il codice nel mio gestore eventi è molto semplice:

if (rdoStatus.SelectedValue == "181003")
{
  tblSheet.BgColor = "#ff9a9a";
}
else
{
  tblSheet.BgColor = "#99ccff";
}
È stato utile?

Soluzione 3

L'ho fatto funzionare!
Ho modificato la tabella come segue (ho rimosso il colore di sfondo):

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

Quindi nel mio codice dietro ho impostato il colore di sfondo in Page_Load quando non è un postback:

tblSheet.Bgcolor = "#99ccff";

Voila! La radiobuttonlist e il gestore eventi sono gli stessi della domanda. Il postback stava cambiando di nuovo il colore all'originale. Grazie per l'aiuto di tutti!

Altri suggerimenti

Inserisci runat = " server " nel tag della tabella

Al termine, potrai accedere alla tabella a livello di codice.

Per cambiare direttamente il colore di sfondo, prova:

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

se stai usando i fogli di stile che puoi, prova questo:

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

Stai attivando il postback che effettuerà questa modifica direttamente dal pulsante di opzione?
È l'unica cosa che cambia in questo momento?

Se la risposta ad entrambi è "sì", dovresti considerare di fare tutto questo in javascript e di saltare completamente il postback:

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

Il ragionamento qui è che i postback sono incredibilmente lenti rispetto a mantenere tutto sul client e danneggiano anche la capacità della tua app Web di ridimensionarsi con facilità (più lavoro sul server è, ovviamente, negativo per la scalabilità). Quindi è più veloce per l'utente e meno lavoro per il tuo server.

Tuttavia, è necessario fare attenzione a non perdere la funzionalità per gli utenti che hanno javascript disabilitato quando si sposta il lavoro fuori dal server. Ma se questo postback è già stato attivato dal tuo pulsante di opzione, allora eri già dipendente da JavaScript per questa funzione.

Prima di tutto non puoi vedere la tabella perché non esiste runat = " server " attributo della tabella che ti consente di vedere l'ID, in secondo luogo non sarai in grado di cambiare un colore della tabella anche se vedi la tabella nel tuo codice. Anche se accederai agli attributi della tabella e imposterai un colore lì, non ti aiuterà neanche perché dovrai postare di nuovo per vedere la modifica.

Quello che devi fare è usare il pannello Aggiorna e usare una variabile invece di # FF9900, in questo modo il colore predefinito sarà Rosso o di qualunque colore sia e al momento del check check box cambierai il valore in Verde o altro colore .

Come ha detto Joel, JavaScript è una soluzione migliore se devi solo cambiare i colori ma e se trasformi la tua tabella in un controllo server (usando runat = server nella tua tabella o un altro controllo server) non dimenticare di usare un blocco di codice incorporato in getElementById per recuperare l'id della tabella perché ASP.NET rinomina l'id quando esegue il rendering della pagina.

Nell'esempio di Joel sembrerà:

<input type="radio" value="..." name="..." id="..."    onclick="document.getElementById('<% =tblSheet.ClientID%>').style.backgroundColor = '#99ccff';" />
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top