簡體   English   中英

在DataGrid的復選框的onclick中使用Databinder.Eval

[英]using Databinder.Eval in onclick of checkbox in datagrid

<asp:DataGrid ID="dg" runat="server">
    <Columns>
        <asp:TemplateColumn>
            <ItemTemplate>
                <asp:CheckBox ID="cb" runat="server" onclick='myCheckChanged("<%#DataBinder.Eval(Container, "DataItem.myid")%>")' />
            </ItemTemplate>
        </asp:TemplateColumn>
    </Columns>
</asp:DataGrid>

這可以運行,但是當我單擊瀏覽器中的復選框時,出現js錯誤。 我嘗試了單引號和雙引號以及轉義的所有組合,但是我遇到了js錯誤或.net“服務器標記格式不正確”錯誤。 我怎樣才能做到這一點?

如果運行代碼,它將顯示為undefined或什么都沒有顯示,因此有一些方法可以執行此方法,首先,最簡單的方法是按以下方式更改cb

<asp:CheckBox ID="cb" runat="server" onclick='<%# string.Format("myCheckChanged(\"{0}\")", Eval("myid")) %>' />

第二種方法code-behindItemDataBound上的code-behind執行此操作,如下所示:

1-將您的“ DataGrid”更改為:

<asp:DataGrid ID="dg" runat="server" OnItemDataBound="dg_ItemDataBound">
        <Columns>
            <asp:TemplateColumn>
                <ItemTemplate>
                    <asp:CheckBox ID="cb" runat="server" />
                </ItemTemplate>
            </asp:TemplateColumn>
        </Columns>
    </asp:DataGrid>

2-在code-behind實現dg_ItemDataBound如:

 protected void dg_ItemDataBound(object sender, DataGridItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
            CheckBox ch = (CheckBox)e.Item.FindControl("cb");
            ch.Attributes.Add("OnClick", string.Format("myCheckChanged({0});", e.Item.Cells[1].Text));
        }
    }

注意:在此代碼段e.Item.Cells[1].Text您必須知道myid位於哪個Cells

這兩種方式均正常運行。

找出一種方法,這是我所做的:

<asp:CheckBox ID="cb" runat="server" onclick=<%# "myCheckChanged('" + DataBinder.Eval(Container, "myid") + "') "%> />

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM