2010-08-03 17 views
7

Wie kann ich diesen Code optimiert? Ich mag keine Case-Anweisung, gibt es eine Möglichkeit, diesen Code zu verbessern?Wie kann ich diesen Code optimieren

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

Antwort

33

Einfach genug. Sie machen immer nur ein Element sichtbar je nach Fall Option, so setzen nur die Sichtbarkeit wie folgt:

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

Das ist besser als alles, was zu visible = false; Einstellung und dann nur das Einzelteil zeigt, die Sie benötigen, da dies es enthält alles in nur 6 Codezeilen für die tatsächliche Sichtbarkeitseinstellung.

+3

Ich würde wahrscheinlich Parantheses hinzufügen, um es lesbarer zu machen. –

+0

+1: einfach und klar – RedFilter

+0

@ray dey - Fairy Noof. Erledigt. – 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

Ein anderer Weg:

// 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. Sehr schön .. – Steven

+0

+1 Gute Gedanken ... –

+1

Was ist mit dem Downvote? Ich weiß, dass der Code nicht genau dasselbe ist wie das Original; es ist nur um die Idee zu zeigen. – NullUserException

3

Sie dies tun könnte:

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"); 
} 

Oder diese, während weniger lesbar, wäre genauer:

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 danke ....... –

2

Es ist ein Unterschied zwischen Optimierung und Verbesserung der Reada Flexibilität. Ich denke, Sie verbessern die Lesbarkeit, da hier keine Optimierung erforderlich ist. Es gibt keinen Algo hier, den Sie einstellen können, um dies um eine signifikante Zeit schneller zu machen.

Antwort 1 und 2 wird meine Wahl der Lesbarkeit zu verbessern sein

0

Ich glaube, Sie brauchen eine tabcontrol hier ..

verstecken Sie die Registerkarten, wenn Sie diese nicht mögen, und Seitenindex über Code.

Der Vorteil ist, dass Sie die GUI zur Entwurfszeit bearbeiten und anzeigen können.

Es wird viel einfacher zu pflegen sein.

+0

ich benutze jquery mit div, aber ich endup mit Problemen können Sie die Frage sehen, die ich hier gepostet http://StackOverflow.com/Questions/3367166/Jquery-Div-disappears-on- Postback und ich lasse die Idee der Verwendung von jQuery/Div –