2010-08-03 15 views
7

¿cómo puedo optimizar este código? No me gusta tener una declaración de caso, ¿hay alguna manera de mejorar este código?cómo puedo hacer que este código sea más optimizado

protected void ddlFilterResultBy_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    string selVal = ddlFilterResultBy.SelectedValue.ToString().ToLower(); 

    switch (selVal) 
    { 
     case "date": 
      pnlDate.Visible = true; 
      pnlSubject.Visible = false; 
      pnlofficer.Visible = false; 
      pnlCIA.Visible = false; 
      pnlMedia.Visible = false; 
      pnlStatus.Visible = false;      
      break; 

     case "subject": 
      pnlDate.Visible = false; 
      pnlSubject.Visible = true; 
      pnlofficer.Visible = false; 
      pnlCIA.Visible = false; 
      pnlMedia.Visible = false; 
      pnlStatus.Visible = false; 
      break; 

     case "officer": 
      pnlDate.Visible = false; 
      pnlSubject.Visible = false; 
      pnlofficer.Visible = true; 
      pnlCIA.Visible = false; 
      pnlMedia.Visible = false; 
      pnlStatus.Visible = false; 
      break; 

     case "status": 
      pnlDate.Visible = false; 
      pnlSubject.Visible = false; 
      pnlofficer.Visible = false; 
      pnlCIA.Visible = false; 
      pnlMedia.Visible = false; 
      pnlStatus.Visible = true; 
      break; 

     default: 
      pnlDate.Visible = false; 
      pnlSubject.Visible = false; 
      pnlofficer.Visible = false; 
      pnlCIA.Visible = false; 
      pnlMedia.Visible = false; 
      pnlStatus.Visible = false; 
      break; 
    } 
} 

Respuesta

33

Bastante fácil. Estás sólo alguna vez hacer un elemento visible dependiendo de la opción caso, por lo que acaba de establecer la visibilidad de la siguiente manera:

pnlDate.Visible = (selVal == "date"); 
pnlSubject.Visible = (selVal == "subject"); 
pnlofficer.Visible = (selVal == "officer"); 
pnlCIA.Visible = false; 
pnlMedia.Visible = false; 
pnlStatus.Visible = (selVal == "status");  

Esto es mejor que definir los ajustes a visible = false; y sólo muestra el elemento que necesita, ya que lo contiene todo en solo 6 líneas de código para la configuración de visibilidad real.

+3

Probablemente añadiría parantheses para hacerlo más legible. –

+0

+1: simple y claro – RedFilter

+0

@ray dey - Hada noof. Hecho. – GenericTypeTea

5
protected void ddlFilterResultBy_SelectedIndexChanged(object sender, EventArgs e) 
      { 
       string selVal = ddlFilterResultBy.SelectedValue.ToString().ToLower(); 
         pnlDate.Visible = false; 
         pnlSubject.Visible = false; 
         pnlofficer.Visible = false; 
         pnlCIA.Visible = false; 
         pnlMedia.Visible = false; 
         pnlStatus.Visible = false; 
       switch (selVal) 
       { 
        case "date": 
         pnlDate.Visible = true;      
         break; 

        case "subject": 
         pnlSubject.Visible = true; 
         break; 

        case "officer": 
         pnlofficer.Visible = true; 
         break; 
        case "status": 
         pnlStatus.Visible = true; 
         break; 
       } 

      } 
10

Otra forma:

// set everything to false 
Dictionary<string, type> d = new Dictionary<string, type>() 
{ 
    {"date", pnlDate}, 
    {"subject", plnSubject}, 
    {"officer", plnOfficer}, 
    {"status", plnStatus} 
}; 

d[selVal].Visible = true; 
+0

+1. Muy bonito .. – Steven

+0

+1 Buena idea ... –

+1

¿Qué pasa con el voto a favor? Sé que el código no hace * exactamente * lo mismo que el original; es solo para mostrar la idea – NullUserException

3

Usted puede hacer esto:

protected void ddlFilterResultBy_SelectedIndexChanged(object sender, EventArgs e) { 
    string selVal = ddlFilterResultBy.SelectedValue.ToString().ToLower(); 

    pnlDate.Visible = (selVal == "date"); 
    pnlSubject.Visible = (selVal == "subject"); 
    pnlofficer.Visible = (selVal == "officer"); 
    pnlCIA.Visible = (selVal == "cia"); 
    pnlMedia.Visible = (selVal == "media"); 
    pnlStatus.Visible = (selVal == "status"); 
} 

O esta otra, mientras menos legible, sería más exacto:

protected void ddlFilterResultBy_SelectedIndexChanged(object sender, EventArgs e) { 
    string selVal = ddlFilterResultBy.SelectedValue.ToString(); 

    pnlDate.Visible = String.Equals(selVal, "date", StringComparison.OrdinalIgnoreCase); 
    pnlSubject.Visible = String.Equals(selVal, "subject", StringComparison.OrdinalIgnoreCase); 
    pnlofficer.Visible = String.Equals(selVal, "officer", StringComparison.OrdinalIgnoreCase); 
    pnlCIA.Visible = String.Equals(selVal, "cia", StringComparison.OrdinalIgnoreCase); 
    pnlMedia.Visible = String.Equals(selVal, "media", StringComparison.OrdinalIgnoreCase); 
    pnlStatus.Visible = String.Equals(selVal, "status", StringComparison.OrdinalIgnoreCase); 
} 
+0

+1 gracias ....... –

2

Hay es una diferencia entre la optimización y la mejora de la reada bilidad. Supongo que está buscando mejorar la legibilidad, ya que la optimización no es realmente necesaria aquí. No hay algo aquí que pueda sintonizar para hacerlo más rápido en un tiempo significativo.

Respuesta 1 y 2 será mi elección de mejorar la legibilidad

0

Creo que se necesita un tabcontrol aquí ..

Sólo ocultar las fichas si no como esos, y el índice de la página a través de código.

La ventaja es que podrá editar y ver la GUI en el tiempo designado.

Será mucho más fácil de mantener.

+0

uso jquery con div pero termino teniendo problemas, puede ver la pregunta que publiqué aquí http://stackoverflow.com/questions/3367166/jquery-div-disappears-on- postback y dejo caer la idea de usar jquery/div –

Cuestiones relacionadas