2013-10-04 8 views
5

Ich habe eine EigenschaftEinstellung geprüft Wert für Eval (bool)

public bool AutoRenew 
{ 
    get; 
    set; 
} 

Und auf der Seite:

<input type="checkbox" checked='<%# Eval("AutoRenew") %>' /> 

aber es wird immer geprüft, auch wenn der Wert der Eigenschaft false ist.

Ich habe versucht, die folgenden Variationen:

<input type="checkbox" checked='<%# Convert.ToBoolean(Eval("AutoRenew")) %>' /> 
<input type="checkbox" checked='<%# Convert.ToBoolean(Eval("AutoRenew")) == true %>' /> 
<input type="checkbox" checked='<%# (Boolean)Eval("AutoRenew") %>' /> 

aber nichts funktioniert, hält es überprüft wird. Wie sollte der Ausdruck aussehen?

EDIT: Hier ist der problematischste Teil auf der Seite:

... 
<asp:ListView ID="MyListView" runat="server"> 
    <LayoutTemplate> 
     <table class="ms-listviewtable" style="background-color: White;"> 
      <tr class="ms-viewheadertr ms-vhltr"> 
       <th class="ms-vh-icon" scope="col"> 
        <input type="checkbox" /> 
       </th> 
       <th class="ms-vh2"> 
        <div class="ms-vh-div"><a>Training Item</a></div> 
       </th> 
       <th class="ms-vh2"> 
        <div class="ms-vh-div"><a>Training Task Type</a></div> 
       </th> 
       <th class="ms-vh2"> 
        <div class="ms-vh-div"><a>Due Date</a></div> 
       </th> 
       <th class="ms-vh2"> 
        <div class="ms-vh-div"><a>Auto-Renew</a></div> 
       </th> 
       <th class="ms-vh2"> 
        <div class="ms-vh-div"><a>Training Reason</a></div> 
       </th> 
      </tr> 
      <tr id="itemplaceholder" runat="server"></tr> 
     </table> 
    </LayoutTemplate> 
    <ItemTemplate> 
     <tr class="ms-itmhover"> 
      <td class="ms-vb-itmcbx ms-vb-firstCell"> 
       <input type="checkbox" class="s4-itm-cbx" /> 
      </td> 
      <td class="ms-vb-title"> 
       <div class="ms-vb itx"><a><%# Eval("Title")%></a></div> 
      </td> 
       <td class="ms-vb2"> 
        <asp:DropDownList ID="TaskTypeDropDownList" runat="server"> 
        </asp:DropDownList> 
       </td> 
       <td class="ms-vb2"><%# Eval("DueDate")%></td> 
       <td class="ms-vb2" style="text-align: center;"> 
        <input type="checkbox" checked='<%# Convert.ToBoolean(Eval("AutoRenew")) %>' /> 
       </td> 
       <td class="ms-vb2"><%# Eval("TrainingReason")%></td> 
      </tr> 
     </ItemTemplate> 
     ... 
+0

hat mich ein bisschen zu erinnern ... „geprüft "ist eines dieser Attribute, das keinen Wert benötigt, aber um es normkonform zu machen, wird checked = 'checked' verwendet. Und jeder Wert würde zu "wahr" auswerten. –

+0

Überprüfen Sie meine aktualisierte Antwort ... –

Antwort

17

Sie verwenden einfache HTML-Checkbox

Daten palin html Checkbox zu binden Sie überprüft verwenden müssen = "checked"

Wenn Sie ASP.NET Checkbox Kontrolle dann funktioniert Ihr Original-Code reibungslos.

Es gibt einen Unterschied zwischen einfachen HTML-Steuerelementen & ASP.NET-Steuerelemente beim Binden von Daten.

//for asp.net checkbox 
<asp:CheckBox ID="IdCheckBox" runat="server" Checked="<%# Convert.ToBoolean(Eval("AutoRenew")) %>" /> 

//for plain html checkbox 
<input type="checkbox" <%# Convert.ToBoolean(Eval("AutoRenew")) ? "checked" : "" %> /> 
+0

Es funktioniert mit ' asp: CheckBox', obwohl ich es immer noch nicht verstehe, warum es immer noch überprüft wird, auch wenn ich @ Satpals Code verwende. – Boris

+0

Ich überprüfe, warte ... –

+0

Ich habe es auf der Beispielseite versucht, />, />, beide Bedingungen funktionieren einwandfrei.Kannst du mehr Details posten –

3

Wunsch Ausgabe von HTML sollten Sie sich auf dem Weg:

<input type="checkbox" checked="checked" /> 
<input type="checkbox" /> 

Das bedeutet, dass, um nicht die Checkbox Sie sollten das Attribut checked in der Ausgabe überhaupt nicht erwähnen, nicht einmal mit dem Wert false.

+1

Wichtiger Punkt zu beachten, die meisten Male ignoriert ... –

2

Add checked Attribut, wenn Convert.ToBoolean(Eval("AutoRenew")) ist true

<input type="checkbox" 
    <%# Convert.ToBoolean(Eval("AutoRenew")) ? "checked" : string.Empty %> /> 
+0

Immer noch überprüft ... – Boris

+0

Komm jetzt ... – Boris

+0

@Boris, gut zu hören, dass – Satpal

1

können Sie anyType Wert in Grid_RowDataBound Ereignis überprüfen:

aspx:

<asp:GridView ID="GridMain" runat="server" OnRowDataBound="GridMain_RowDataBound">     
    <Columns>      
     <asp:TemplateField> 
     <ItemTemplate> 
        <asp:CheckBox runat="server" ID="grid_chkbox" Enabled="false" /> 
       </ItemTemplate 
     </asp:TemplateField>       
    </Columns>    
</asp:GridView> 

aspx.cs:

protected void GridMain_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
    //find the checkboxes in the template field. 
     CheckBox grid_chkbox= (CheckBox)e.Row.FindControl("grid_chkbox");    

    //find boolean value in current record 
     grid_chkbox.Checked = e.Row.DataItem.boolvalue; 
    } 
} 
Verwandte Themen