2012-04-08 11 views
0

Ich habe geschaut und geschaut und ich sehe keine Antwort darauf.ASP.Net, Datagrid: Renderspalte unterschiedlich basierend auf Wert?

Ich habe einen Datetime-Wert, der an ein Datagrid gebunden wird. Ich möchte die Spalte entweder als Datetime anzeigen, oder wenn die Datetime null ist, eine Asp: -Schaltfläche für die Benutzer klicken.

Ich kann nicht scheinen, spezifische Informationen darüber zu finden, wie man es macht. Meine anfängliche Annäherung war <%, wenn blah blah dann%>, aber ich kann nicht scheinen, um das Datenelement in dieser Art zu erhalten. Ich habe mir auch die Ereignisse angeschaut, aber nichts springt mir als Lösung vor (ich bin sicher, ich liege falsch, ich sehe es einfach nicht).

Irgendwelche Vorschläge?

+0

DataGrid ist ASP.NET 1.1 Kontrolle, vielleicht können Sie Ihre Probleme mit GridView http://msdn.microsoft.com/en-us/library/05yye6k9.aspx lösen –

Antwort

1

Angenommen, Sie meinen eigentlich GridView statt DataGrid, sonst würde es ähnlich funktionieren (ItemDataBound etc.).

Sie eine TemplateField mit einem Label verwenden könnte und ein Button und Schalter Sichtbarkeit der beiden Kontrollen in RowDataBound:

protected void Grid_RowDataBound(Object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     var row = ((DataRowView)e.Row.DataItem).Row; 
     DateTime? date = row.Field<DateTime?>("DateColumn"); 
     var lblDate = (Label)e.Row.FindControl("LblDate"); 
     var btnDate = (Button)e.Row.FindControl("BtnDate"); 
     lblDate.Visible = date.HasValue; 
     btnDate.Visible = !date.HasValue; 
     if (date.HasValue) lblDate.Text = date.ToString(); 
    } 
} 

aspx:

<asp:GridView ID="GridView1" AutoGenerateColumns="false" OnRowDataBound="Grid_RowDataBound" runat="server"> 
<Columns> 
    <asp:TemplateField HeaderText="DateColumn"> 
     <ItemTemplate> 
      <asp:Label ID="LblDate" runat="server"></asp:Label> 
      <asp:Button ID="BtnDate" Text="click me" runat="server" /> 
     </ItemTemplate> 
    </asp:TemplateField> 
</Columns> 
</asp:GridView> 
+0

Langsame Antwort aufgrund der Osterferien, tut mir leid, dass . Das war perfekt, danke :) – Fred

0

sollten Sie Gridview verwenden, wenn Sie ASP verwenden. NET 3.5 oder höher. Fügen Sie mithilfe einer Vorlagefeldspalte eine Schaltfläche und eine Beschriftung hinzu. Im rowdatabound-Ereignis sollten Sie nur die Schaltfläche oder das Label anzeigen, abhängig davon, ob ein Datum vorhanden ist oder nicht. Verwenden Sie dazu die Visible-Eigenschaft.

+0

Ich sehe, Tim hat mich dazu geschlagen. Mit Code zum Booten! – dotnetN00b

+0

GridView existiert auch in ASP.NET 2.0 –

Verwandte Themen