2010-12-01 23 views
1

Ich habe eine Klasse mit allen Arten von Datenelementen, einschließlich einer Liste von Zeichenfolgen. Wenn ich die Daten an eine GridView binde, möchte ich in der Lage sein, die Liste der Strings in verschiedene Spalten in der GridView zu trennen. Diese Strings sind mehr wie Flags, es gibt maximal 3 Flags. Die Liste könnte leer sein, wenn keine Flags zutreffen, oder sie könnte nur ein oder zwei Flags enthalten. Wie kann ich diese Flags in verschiedene GridView-Spalten trennen? Muss ich dies im OnRowDataBound-Ereignis tun?Binden einer Liste innerhalb einer Liste an eine GridView

Aktuelle, mein aspx-Code sieht in etwa so aus. Ich möchte in der Lage sein, das ImageUrl der Image-Steuerelemente basierend darauf zu ändern, ob das Flag ausgelöst wird oder nicht.

<asp:TemplateField HeaderText="Tax" SortExpression="Tax"> 
    <ItemTemplate> 
     <asp:Image ID="imgTax" runat="server" /> 
    </ItemTemplate> 
</asp:TemplateField> 

    <asp:TemplateField HeaderText="Compliance" SortExpression="Compliance"> 
    <ItemTemplate> 
     <asp:Image ID="imgCompliance" runat="server" /> 
    </ItemTemplate> 
</asp:TemplateField> 

    <asp:TemplateField HeaderText="Accounting" SortExpression="Accounting"> 
    <ItemTemplate> 
     <asp:Image ID="imgAccounting" runat="server" /> 
    </ItemTemplate> 
</asp:TemplateField> 

Vielen Dank!

+0

So müssen Sie programmatisch Ein-/Ausblenden diese Bilder auf der Grundlage der Existenz der Flagge? – jwiscarson

Antwort

0

Gibt es eine Möglichkeit für Sie, Ihre Daten zu ändern, um diese Zeichenfolgen in booleans umzuwandeln? Die Verwendung von Strings auf diese Weise erscheint mir als Code-Geruch. Persönlich würde ich diese Strings in boolesche Eigenschaften der Klasse umwandeln, die Sie als Datenquelle für Ihr Grid verwenden, und ihre Sichtbarkeitseigenschaften im Markup ändern, anstatt in die Datenbank zurückzukehren, um diese Eigenschaften in einer Zeile auszuwählen. Zeilenbasis.

Unabhängig davon, dass, ja, können Sie die RowDataBound Veranstaltung wie diese verwenden:

yourGrid_RowDataBound(object sender, EventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     YourClass currentClass = (YourClass) e.Row.DataItem; 

     for (int i = 0; i < currentClass.stringFlags.Length; i++) 
     { 
      string currentFlag = currentClass.stringFlags[i]; 

      if (currentFlag == "Tax") 
      { 
       Image imgTax = (Image) e.Row.FindControl("imgTax"); 
       imgTax.Visbile = true; 
      } 
      else if (currentFlag == "Compliance") 
      { 
       Image imgCompliance = (Image) e.Row.FindControl("imgCompliance"); 
       imgCompliance.Visbile = true; 
      } 
      else if (currentFlag == "Accounting") 
      { 
       Image imgAccounting = (Image) e.Row.FindControl("imgAccounting"); 
       imgAccounting.Visbile = true; 
      } 
     } 
    } 
} 
+0

Danke! Das hat sehr geholfen. Ursprünglich sind die Strings eine Aufzählung in einer anderen Ebene, aber aus irgendeinem Grund zwischen der Ebene und der GUI wechseln sie zu Strings. Ich werde sehen, was ich tun kann, um das zu ändern. – mhenry

Verwandte Themen