2010-11-23 9 views
2

Ich habe folgendes gridview:Wie ersetze ich ein Kontrollkästchen in der Gridview durch Text?

 <asp:GridView ID="gdvReport" runat="server" AutoGenerateColumns="False" DataSourceID="sdseport"> 
     <Columns> 
      <asp:BoundField DataField="Phone" HeaderText="Phone" SortExpression="Phone"> 
       <ControlStyle Width="250px" /> 
      </asp:BoundField> 
      <asp:BoundField DataField="ToCall" HeaderText="Foramt" SortExpression="ToCall" /> 
     </Columns> 
    </asp:GridView> 

Die zweite Reihe ist ein Bool in der Datenbank, aber ich will nicht, ein Kontrollkästchen oder wahr \ falsch an die Benutzer zeigen.

Wie zeige ich stattdessen so etwas an? 0 = Nicht anrufen 1 = Rufen Sie uns an

Antwort

1

Ich landete nur mit OnRowDataBound für diese.

<asp:GridView ID="gdvReport" runat="server" AutoGenerateColumns="False" DataSourceID="sdseport" OnRowDataBound="OnRowDataBound"> 
    <Columns> 
     <asp:BoundField DataField="Phone" HeaderText="Phone" SortExpression="Phone"> 
      <ControlStyle Width="250px" /> 
     </asp:BoundField> 
     <asp:BoundField DataField="ToCall" HeaderText="Foramt" SortExpression="ToCall" /> 
    </Columns> 
</asp:GridView> 


protected void OnRowDataBound(object sender, EventArgs e) 
{ 
    GridViewRowEventArgs ea = e as GridViewRowEventArgs; 
    if (ea.Row.RowType == DataControlRowType.DataRow) 
    { 
     DataRowView drv = ea.Row.DataItem as DataRowView; 
     Object ob = drv["Phone"]; 
     if (!Convert.IsDBNull(ob)) 
     { 
      bool iParsedValue = false; 
      if (bool.TryParse(ob.ToString(), out iParsedValue)) 
      { 
       TableCell cell = ea.Row.Cells[1]; 
       if (iParsedValue == false) 
       { 

        cell.Text = "Don't Call"; 
       } 
       else 
       { 
        cell.Text = "Call Us"; 
       } 

      } 
     } 
    } 
} 

Und es funktioniert jetzt großartig. Dies ist der wichtige Teil

3

Sie könnten ein TemplateField anstelle eines BoundFields erstellen.

<asp:TemplateField HeaderText="Whatever"> 
    <ItemTemplate> 
     <asp:Literal ID="litTextValue" runat="server" /> 
    </ItemTemplate> 
</asp:TemplateField> 

Sie könnten dann einen Code inline setzen den Text anzuzeigen, die Sie wollen oder die RowDataBound Ereignis behandeln, da die Logik zu tun.

+0

verwenden verwenden, die ich nicht viel Glück mit dem TemplateField, also ging ich eine andere Route (siehe meine Antwort). Allerdings lese ich etwas auf TemplateField, da ich es nicht oft benutze. – InsertOldUserIDHere

0

tat ich dies und es

 <asp:Literal ID="isActive" runat="server" 
    Text='<%#Eval("isActive")==DBNull.Value ? 
    "inactive":Convert.ToBoolean(Eval("isActive"))?"active":"inactive" 
    %>'></asp:Literal> 

arbeiten.

Text = '<% # Eval ("isActive") == DBNull.Value "inaktiv": Convert.ToBoolean (Eval ("isActive")) "aktiv": "inaktiv" %>'

Hoffe, dass hilft.

0

Sie sollten es in der SQL tun, anstatt es hier zu tun, eine CASE-Anweisung wie

CASE ToCall WHEN '1' THEN 'Call' ELSE 'Do not call' END AS ToCall

und dann ein so einfaches gebundenes Feld als

<asp:BoundField DataField="ToCall" HeaderText="Foramt" SortExpression="ToCall" />
Verwandte Themen