2009-03-14 11 views
2

Ich habe eine DataTable, die 3 Felder enthält: ACount, BCount und DCount. Wenn ACount < 0 dann muss ich "S" in einer der Spalten der GridView anzeigen. Wenn ACount > 0 dann muss ich "D" in dieser Spalte (in Etikett) anzeigen. Das Gleiche gilt für BCount und DCount. Wie kann ich diese bedingte Überprüfung in der RowDataBound Funktion durchführen?RowDataBound Funktion von GridView

+0

Welche Version von .NET Framework verwenden Sie und welches Steuerelement möchten Sie verwenden, DataGridView? –

Antwort

5

Die Gridview OnRowDataBound Veranstaltung ist dein Freund:

<asp:gridview 
    id="myGrid" 
    onrowdatabound="MyGrid_RowDataBound" 
    runat="server"> 

    <columns> 
    <asp:boundfield headertext="ACount" datafield="ACount" /> 
    <asp:boundfield headertext="BCount" datafield="BCount" /> 
    <asp:boundfield headertext="DCount" datafield="DCount" /> 
    <asp:templatefield headertext="Status"> 
     <itemtemplate> 
     <asp:label id="aCount" runat="server" /> 
     <asp:label id="bCount" runat="server" /> 
     <asp:label id="dCount" runat="server" /> 
     </itemtemplate> 
    </asp:templatefield> 
    </columns> 
</asp:gridview> 

// Put this in your code behind or <script runat="server"> block 
protected void MyGrid_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if(e.Row.RowType != DataControlRowType.DataRow) 
    { 
    return; 
    } 

    Label a = (Label)e.Row.FindControl("aCount"); 
    Label b = (Label)e.Row.FindControl("bCount"); 
    Label d = (Label)e.Row.FindControl("dCount"); 

    int ac = (int) ((DataRowView) e.Row.DataItem)["ACount"]; 
    int bc = (int) ((DataRowView) e.Row.DataItem)["BCount"]; 
    int dc = (int) ((DataRowView) e.Row.DataItem)["DCount"]; 

    a.Text = ac < 0 ? "S" : "D"; 
    b.Text = bc < 0 ? "S" : "D"; 
    d.Text = dc < 0 ? "S" : "D"; 
} 

Ich bin nicht sicher, wo Sie das ‚S‘ und ‚D Zeichen gemacht wollen, aber Sie sollten Ihre Bedürfnisse verfeinern können, gerecht zu werden.

2

Das hat für mich funktioniert .... Ich muss etwas falsch verstehen, also musste ich abgewinkelte Klammern mit [oder] für den ASP ersetzen, also sei dir dessen bewusst.

[asp:TemplateField runat="server" HeaderText="Header"] 
[ItemTemplate] 
[asp:Label ID="theLabel" runat="server" Text='[%# Eval("DataSource").ToString() 
    %]'][/asp:Label] 
[/ItemTemplate] 
[/asp:TemplateField] 


protected void GridView_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     Label newLabel = (Label)e.Row.FindControl("theLabel"); 

     if (newLabel.Text.Length > 20) //20 is cutoff length 
     { 
      newLabel.Text = lbl.Text.Substring(0, 20); 

      newLabel.Text += "..."; 
     } 
    } 
} 
Verwandte Themen