2012-08-22 27 views
3

我想知道是否可以使用中繼器的數據源的bool變量來設置複選框的檢查標準?在ASP中繼器中設置CheckBox「Checked」propery

我試過多種方法,但沒有任何成功...:

<asp:Repeater ID="rpt" runat="server"> 
    <itemTemplate> 
     <asp:CheckBox runat="server" CssClass="checkbox" 
      Checked="<%#Eval("IsDefault").ToString().ToLower()%>" 
      ID="isDefaultCheckBox"/> 
    </itemTemplate> 
</asp:Repeater> 

<asp:Repeater ID="rpt" runat="server"> 
    <itemTemplate> 
     <asp:CheckBox runat="server" CssClass="checkbox" 
      Checked="<%# DataBinder.Eval(Container.DataItem, "IsDefault")%>" 
      ID="isDefaultCheckBox"/> 
    </itemTemplate> 
</asp:Repeater> 

ISDEFAULT是一類視場:

public bool IsDefault 

Repeater的數據源是列表。

+0

您是否也試過這樣:'選中='<%#的eval( 「ISDEFAULT」 )%>''? –

+0

是的 - 也行不通。 –

回答

3

另一種解決方案是處理ItemDataBound事件:

<asp:Repeater ID="rpt" runat="server" OnItemDataBound="rpt_ItemDataBound"> 
    <itemTemplate> 
     <asp:CheckBox runat="server" CssClass="checkbox" ID="isDefaultCheckBox"/> 
    </itemTemplate> 
</asp:Repeater> 

...

protected void rpt_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    RepeaterItem ri = e.Item; 
    var dataItem = ri.DataItem as YourClassOrInterface; 
    var isDefaultCheckBox = ri.FindControl("isDefaultCheckBox") as CheckBox; 
    isDefaultCheckBox.Checked = dataItem.IsDefault; 
} 
+0

是的。謝謝,這對我很有用! –

3

我相當肯定,它應該以這種方式工作:

Checked='<%# Bind("IsDefault") %>' 

順便說一句,有一個在你的第一種方法缺少<

Checked="%#Eval... 

編輯(自你也編輯了你的問題,並糾正它)

現在有東西別人錯了,你在這裏已經連續兩次報價:

Checked="<%#Eval(" 
+0

我的錯誤,同時複製代碼。使用'<%#Eval(「IsDefault」)%>'仍然不起作用。 –

+0

@看起來像一箇舊項目,我用'綁定'那裏的複選框'檢查屬性。看到我編輯的答案。你確定它是數據源中的布爾值嗎? –

+0

是的,我確定。我不知道爲什麼,但仍然沒有按照你的方式工作。 –

2

與代碼的問題實際上是事實上你在嵌套雙引號

Checked="<%# DataBinder.Eval(Container.DataItem, "IsDefault")%>" 

應該

Checked='<%# DataBinder.Eval(Container.DataItem, "IsDefault")%>' 
3

老問題,但我使用的東西更簡單的解決了這個在我的應用程序:

<asp:CheckBox ID="chkIncludePdf" runat="server" Checked='<%# Eval("DefaultInclude").ToString() == "True" %>' />