我有转发器
<asp:Repeater ID="rptResult" runat="server" >
<ItemTemplate>
<tr>
<td>
<asp:CheckBox ID="chkShipStatus" runat="server" EnableViewState="true" ViewStateMode = "Enabled" AutoPostBack="True" CommandName='<%# DataBinder.Eval(Container.DataItem, "CT")%>' OnCheckedChanged="chkShipStatus_CheckedChanged" Checked='<%# Convert.ToBoolean(Eval("SHIPPED")) ? true : false %>' />
</td>
</tr>
</ItemTemplate>
</asp:Repeater>
和
并从page_load调用数据
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DataTable dt = ap.GetDataTable(sql);
rptResult.DataSource = dt;
rptResult.DataBind();
}
//go there and finish when unchecd
}
这里是我的CheckedChanged事件,只有当我在取消选中时没有激活它才会调用它转到page_load(不是incycle!postback)
protected void chkShipStatus_CheckedChanged(object sender, EventArgs e)
{
var cb = (CheckBox)sender;
//go there when i checked
if (cb.Checked == true)
{
//go there when i checked
}
else
{
//never go in here when i uncheck
}
}
答案 0 :(得分:0)
CheckBox
没有CommandName
属性,因此将其删除
<asp:CheckBox ID="chkShipStatus" runat="server" EnableViewState="true" ViewStateMode = "Enabled"
AutoPostBack="True"
OnCheckedChanged="chkShipStatus_CheckedChanged"
Checked='<%# Convert.ToBoolean(Eval("SHIPPED")) ? true : false %>'
/>
如果您想知道复选框在哪个项目中,您可以使用NamingContainer
。然后使用repeaterItem.FindControl
获取RepeaterItem
中的另一个控件。因此,您可以使用HiddenField
来存储记录的ID。
protected void chkShipStatus_CheckedChanged(object sender, EventArgs e)
{
var cb = (CheckBox)sender;
RepeaterItem item = (RepeaterItem) cb.NamingContainer
HiddenField hiddenID = (HiddenField) item.FindControl("HiddenID");
string id = hiddenID.Value;
// ...
}
答案 1 :(得分:0)
只有在我取消选中时才打开它才会调用它转到page_load(不是incycle!postback)
那么加载中的代码是什么? 它可能有一些代码阻止取消选中过程
答案 2 :(得分:0)
如果您有 SHIPPED 列值,例如1 OR 0,那么我建议您更新复选框控件的以下属性。我试过了,并且 chkShipStatus_CheckedChanged 事件要求我。
Checked='<%# Convert.ToString(Eval("SHIPPED")) == "1" ? true : false %>'