2010-11-26 4 views
0

Wie können Sie benutzerdefinierte Ausgabe für eine gebundene Gridview tun? I.e. Ich habe ein boolesches Feld in einer Datenbank, anstatt True auszugeben, wie ich von <% # DataBinder.Eval (Container.DataItem, "BoolField")%> bekomme, möchte ich ein Bild (wie ein Häkchen) setzen in der Rasteransicht. Ist das möglich?Ausgabebild in Datagrid

Antwort

1

Vor allem Eval ist schlecht. Es gibt eine Lösung mit Eval, aber ich werde es mit Absicht überspringen.

Es gibt 2 andere Lösungen. Sie können das ImageField verwenden und die Daten so gestalten, dass sie die entsprechende URL für das Bild in einer speziellen Eigenschaft übergeben, die Sie in der DataImageUrlField-Eigenschaft von ImageField angeben sollten. Die andere Lösung besteht darin, ein Template-Feld mit einem Image-Steuerelement hinzuzufügen und das RowDataBound-Ereignis zu behandeln, die Daten für die Zeile aus den Event-Argumenten zu erhalten. E.Row.DataItem wandelt es in den Typ der Elemente in Ihrer Datenquelle um Extrahiere den booleschen Wert. Dann können Sie FindControl verwenden, um das Image-Steuerelement zu erhalten und seine Eigenschaften zuzuweisen. Etwas wie folgt aus:

protected void Page_Load(object sender, EventArgs e) 
{ 
    gvTest.DataSource = new bool[] { true, false }; 
    gvTest.DataBind(); 
} 

protected void gvTest_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     Image imgBool = (Image)e.Row.FindControl("imgBool"); 
     bool data = (bool)e.Row.DataItem; 
     if (data) 
     { 
      imgBool.ImageUrl = "/images/true.jpg"; 
      imgBool.AlternateText = "This is true"; 
     } 
     else 
     { 
      imgBool.ImageUrl = "/images/false.jpg"; 
      imgBool.AlternateText = "This is false"; 
     } 
    } 
}

Dies mag wie eine Menge Arbeit erscheinen, aber denken Sie daran, dass Sie diese gleiche Handler kann mit allen Spalten im Raster in eine Art sichere Art und Weise zu arbeiten.

+0

Danke Kumpel, genau was ich suchte. – Sam

+0

Kann ich fragen, warum ist Eval böse? – Sam

+0

Eval ist böse, weil es stringbasiert ist. Stellen Sie sich vor, Sie binden das Raster an eine Produktliste und binden eine Spalte über Eval an die ProductName-Eigenschaft. Später jedoch entscheiden Sie, den Eigenschaftsnamen in Name zu ändern. Wenn Sie eval verwenden, erhalten Sie keinen Fehler bei der Kompilierung. Wenn Sie über die Database-Ereignisse binden, werden Sie. Möglicherweise stellen Sie fest, dass FindControl auch Zeichenfolgen verwendet, FindControl jedoch in einem einzelnen Dateipaar (dem Markup und dem Code hinter Dateien) liegt und Sie es viel wahrscheinlicher sehen und den zugehörigen Codepfad testen, wenn Sie den Namen des Steuerelements ändern . – Stilgar

0
+0

Haben Sie gelesen, was ich geschrieben habe oder nur gegoogelt? Ich versuche nicht, eine Bild-URL auszugeben. – Sam

+0

Das HTML-Tag img benötigt src param. Es gibt die URL eines Bildes an –