在数据网格中的复选框单击时使用 Databinder.Eval

using Databinder.Eval in onclick of checkbox in datagrid

本文关键字:Databinder Eval 单击 复选框 数据网 数据 网格      更新时间:2023-09-26
<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像这样做:

1-将您的"数据网格"更改为:

<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") + "') "%> />