datalist嵌套datalist,checkbox无法选中问题 datalist嵌套datalist,里层datalist中有控件checkbox,代码选中checkbox却不能实现,都说要在内层的datalist再绑定次,我也绑定了却不起作用,大家帮忙看下啊! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 代码如下:for (int i = 0; i < dlTypeList.Items.Count; i++) { DataList dlWeightList = (DataList)dlTypeList.Items[i].FindControl("dlWeightList"); for (int j = 0; j < dlWeightList.Items.Count; j++) { CheckBox ckb = (CheckBox)dlWeightList.Items[j].FindControl("ckb"); ckb.Checked = true; int Dimension_ID = int.Parse(dlWeightList.DataKeys[j].ToString()); InitdltDimension(dlWeightList, Dimension_ID);//重新绑定 } } for (int j = 0; j < dlWeightList.Items.Count; j++) { CheckBox ckb = (CheckBox)dlWeightList.Items[j].FindControl("ckb"); ckb.Checked = true; //不知有什么用 int Dimension_ID = int.Parse(dlWeightList.DataKeys[j].ToString()); InitdltDimension(dlWeightList, Dimension_ID);//重新绑定 } 用js写check看看for (int i = 0; i < dlTypeList.Items.Count; i++) { DataList dlWeightList = (DataList)dlTypeList.Items[i].FindControl("dlWeightList"); for (int j = 0; j < dlWeightList.Items.Count; j++) { ClientScript.RegisterStartupScript(this.GetType(), "", "<script>document.getElementById('ckb').check = true ;</script>"); CheckBox ckb = (CheckBox)dlWeightList.Items[j].FindControl("ckb"); ckb.Checked = true; int Dimension_ID = int.Parse(dlWeightList.DataKeys[j].ToString()); InitdltDimension(dlWeightList, Dimension_ID);//重新绑定 } } 用 javascript 和隐藏INPUT 来处理选中的Checkbox对应的记录ID eg:嵌套的DataList里面放一个:<input type="checkbox" runat="server" id="checkbox1" onclick="clickBox()">嵌套的DataList绑定时:private void DataList2_ItemDataBound(object sender, System.Web.UI.WebControls.DataListItemEventArgs e) { if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { HtmlInputCheckBox chk = e.Item.FindControl("checkbox1") as HtmlInputCheckBox; if(chk != null) { DataRowView dr = e.Item.DataItem as DataRowView; if(dr != null) chk.Attributes.Add("sublistid", "sub_" + dr["IntegerValue"].ToString()); } } } <asp:datalist id="DataList1" runat="server" width="100%"> <itemtemplate> <div><%# DataBinder.Eval(Container.DataItem, "IntegerValue") %></div> <hr width="100%"> <asp:datalist id="DataList2" runat="server" width="100%"> <itemtemplate> <hr width="50%"> <div><%# DataBinder.Eval(Container.DataItem, "DateTimeValue") %>: <input type="checkbox" runat="server" id="checkbox1" onclick="clickBox()"> checkbox </div> </itemtemplate> </asp:datalist> </itemtemplate> </asp:datalist><script language="javascript"><!--function clickBox(){ var obj = event.srcElement; //sublistid="sub_6" if(obj.checked) alert( obj.getAttribute("sublistid") );}//--> </script>把选中的Checkbox的自定义属性sublistid的值保存到下来,POST后就可以处理了 小妹在此谢过大家的热心帮助!重新说明下,内层的datalist是程序让checkbox选中而不能实现,估计是状态丢失! 如果你想让checkbox选中,那么“ ckb.Checked = true;”应该在整个页面的page_load事件之后的事件中执行。如果你的代码是在page_load 事件中或者之前执行的,好好考虑的你的逻辑。page_load是用来恢复上一个页面处理过程中的状态的,不是用来设置本次页面处理过程的状态的。如果哪个客户端操作触发的业务逻辑需要设置一些 ckb.Checked,就在这个操作对应的事件中处理,例如在按钮对应的事件中处理。如果肯定需要设置一些 ckb.Checked,而与客户端操作无关,就在 Prerender 事件中处理。总之,这些业务逻辑应该是写在页面的 page_load 之后的,不要写在 page_load 事件中处理。 项目中碰到需要建立超过100个字段的数据库,有什么好的办法? 一个菜鸟用C#连接SQL server引起的故事 非常奇怪,安装完vs2008,发现少了... 关于内容中包含js 显示的问题 关于导出EXCEL的问题 怎么取到Request.QueryStringa啊 变量申明的时候什么时候用new? .net 弹窗 如百度登录这个 学了asp.net后 怎样将03-28-2003转换为2003年3月28日?? 下载文件时,怎样让它提示下载而不是直接打开文件?!!! 数字中显示分节号?
for (int i = 0; i < dlTypeList.Items.Count; i++)
{
DataList dlWeightList = (DataList)dlTypeList.Items[i].FindControl("dlWeightList");
for (int j = 0; j < dlWeightList.Items.Count; j++)
{
CheckBox ckb = (CheckBox)dlWeightList.Items[j].FindControl("ckb");
ckb.Checked = true;
int Dimension_ID = int.Parse(dlWeightList.DataKeys[j].ToString());
InitdltDimension(dlWeightList, Dimension_ID);//重新绑定
}
}
{
CheckBox ckb = (CheckBox)dlWeightList.Items[j].FindControl("ckb");
ckb.Checked = true; //不知有什么用
int Dimension_ID = int.Parse(dlWeightList.DataKeys[j].ToString());
InitdltDimension(dlWeightList, Dimension_ID);//重新绑定
}
for (int i = 0; i < dlTypeList.Items.Count; i++)
{
DataList dlWeightList = (DataList)dlTypeList.Items[i].FindControl("dlWeightList");
for (int j = 0; j < dlWeightList.Items.Count; j++)
{
ClientScript.RegisterStartupScript(this.GetType(), "", "<script>document.getElementById('ckb').check = true ;</script>"); CheckBox ckb = (CheckBox)dlWeightList.Items[j].FindControl("ckb"); ckb.Checked = true;
int Dimension_ID = int.Parse(dlWeightList.DataKeys[j].ToString());
InitdltDimension(dlWeightList, Dimension_ID);//重新绑定
}
}
嵌套的DataList里面放一个:
<input type="checkbox" runat="server" id="checkbox1" onclick="clickBox()">嵌套的DataList绑定时:
private void DataList2_ItemDataBound(object sender, System.Web.UI.WebControls.DataListItemEventArgs e)
{
if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
HtmlInputCheckBox chk = e.Item.FindControl("checkbox1") as HtmlInputCheckBox;
if(chk != null)
{
DataRowView dr = e.Item.DataItem as DataRowView;
if(dr != null)
chk.Attributes.Add("sublistid", "sub_" + dr["IntegerValue"].ToString());
}
}
}
<itemtemplate>
<div><%# DataBinder.Eval(Container.DataItem, "IntegerValue") %></div>
<hr width="100%">
<asp:datalist id="DataList2" runat="server" width="100%">
<itemtemplate>
<hr width="50%">
<div><%# DataBinder.Eval(Container.DataItem, "DateTimeValue") %>: <input type="checkbox" runat="server" id="checkbox1" onclick="clickBox()">
checkbox
</div>
</itemtemplate>
</asp:datalist>
</itemtemplate>
</asp:datalist><script language="javascript">
<!--
function clickBox()
{
var obj = event.srcElement;
//sublistid="sub_6"
if(obj.checked)
alert( obj.getAttribute("sublistid") );
}
//-->
</script>把选中的Checkbox的自定义属性sublistid的值保存到下来,POST后就可以处理了
重新说明下,内层的datalist是程序让checkbox选中而不能实现,估计是状态丢失!