DataList 中CheckBox的OnCheckedChanged事件

望京最帅程序猿 2009-03-12 03:55:20
服务器端事件我已经触发了,但感觉很不爽,一选就刷屏,用户体验不好,想该成客户端事件。
即写一个Js函数来完成这个处理,选中一个CheckBox,就给这一行的扣分的TextBox赋值,值为Hidden中的值。
请大侠们指点一二?
我的DataList是嵌套的。
下面是页面和后台代码片段。
aspx:
<asp:DataList ID="FirstAssessItemList" runat="server" OnItemDataBound="FirstAssessItemList_ItemDataBound" Width="100%" >
<ItemTemplate>

<tr>
<td style="width:20%" align="left">
<a name='anchor<%# DataBinder.Eval(Container, "DataItem.SortNo") %>'></a>
<%# DataBinder.Eval(Container, "DataItem.SortNo") %> 
<asp:Label ID="FirstAssessItemName" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.AssessItemName") %>'></asp:Label>
<asp:HiddenField ID="FirstAssessItemID" runat="server" Value='<%# DataBinder.Eval(Container, "DataItem.ID") %>'/>
</td>
<td style="width:20%" align="center">
<asp:Label ID="FirstBaseMark" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.BaseMark") %>'></asp:Label>
</td>
<td style="width:40%">  </td>
<td style="width:20%">  </td>
</tr>
<!--二级考核项目 开始-->
<tr>
<td colspan="6" style="width:100%">
<asp:DataList ID="SecondAssessItemList" runat="server" OnItemDataBound="SecondAssessItemList_ItemDataBound" Width="100%" Border="1">
<ItemTemplate>
<tr>
<td style="width:20%" align="left">
<%# DataBinder.Eval(Container, "DataItem.SortNo") %> 
<asp:Label ID="SecondAssessItemName" runat="server"
Text='<%# DataBinder.Eval(Container, "DataItem.AssessItemName") %>'></asp:Label>
<asp:HiddenField ID="SecondAssessItemID" runat="server" Value='<%# DataBinder.Eval(Container, "DataItem.ID") %>'/> 

</td>
<td style="width:20%" align="center">
<asp:Label ID="SecondBaseMark" runat="server"
Text='<%# DataBinder.Eval(Container, "DataItem.BaseMark") %>'></asp:Label>  

</td>
<td style="width:40%" align="left" valign="top">
<!--考核细则 开始-->
<asp:DataList ID="MinusItemList" runat="server" Width="100%">


<ItemTemplate>
<tr>
<td style="width:85%">
<asp:CheckBox ID="MinusItemCB" runat="server" Checked="false"
OnCheckedChanged="MinusItemCB_CheckedChanged" AutoPostBack="true"/>
<%# Container.ItemIndex + 1%>、
<asp:Label ID="MinusItemContent" runat="server"
Text='<%# DataBinder.Eval(Container, "DataItem.DetailContent") %>'></asp:Label> 
<asp:HiddenField ID="MinusItemID" Value='<%# DataBinder.Eval(Container, "DataItem.ID") %>' runat="server" />
<asp:HiddenField ID="MinusMark" Value='<%# DataBinder.Eval(Container, "DataItem.Mark") %>' runat="server" />
</td>
<td style="width:15%">
<asp:TextBox ID="MinusFactMark" runat="server" Width="100%" Text=""></asp:TextBox>
</td>
</tr>
</ItemTemplate>


</asp:DataList>
<!--考核细则 结束-->

</td>
<td style="width:20%" valign="middle">
<!--加分项目 开始-->
<asp:DataList ID="AddItemList" runat="server" Width="100%">
<ItemTemplate>
<tr>
<td style="width:70%">
<asp:CheckBox ID="AddItemCB" runat="server" Checked="false" OnCheckedChanged="AddItemCB_CheckedChanged"
AutoPostBack="true"/>
<%# Container.ItemIndex + 1%>、
<asp:Label ID="AddItemContent" runat="server"
Text='<%# DataBinder.Eval(Container, "DataItem.DetailContent")>'></asp:Label> 
<asp:HiddenField ID="AddItemID" Value='<%# DataBinder.Eval(Container, "DataItem.ID") %>' runat="server" />
<asp:HiddenField ID="AddMark" Value='<%# DataBinder.Eval(Container, "DataItem.Mark") %>' runat="server" />
</td>
<td style="width:30%">
<asp:TextBox ID="AddFactMark" runat="server" Text="" Width="100%"></asp:TextBox>
</td>
</tr>
</ItemTemplate>
</asp:DataList>
<!--加分项目 结束-->

</td>
</tr>
</ItemTemplate>
</asp:DataList>
</td>

</tr>
<!--二级考核项目 结束-->
</ItemTemplate>
</asp:DataList>

cs:

/// <summary>
/// 扣分细则的CheckBox状态改变事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public void MinusItemCB_CheckedChanged(object sender, EventArgs e)
{
CheckBox cb = sender as CheckBox;
bool IsChecked = cb.Checked;
DataListItem MinusItem = cb.NamingContainer as DataListItem;
if (IsChecked)
{
((TextBox)MinusItem.FindControl("MinusFactMark")).Text = ((HiddenField)MinusItem.FindControl("MinusMark")).Value;
}
else
{
((TextBox)MinusItem.FindControl("MinusFactMark")).Text = "";
}

}
...全文
722 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
2楼的想法我也想过,不过没去试,应该是个解决方案。
1楼的方法是我昨天用的,昨天在网上搜罗一番,就给解决了。
我是这样写的。
js:
function CheckEvent(chkbox,hdn,txtbox)
{

if(document.getElementById(chkbox).checked)
{

document.getElementById(txtbox).value = document.getElementById(hdn).value;
}
else
{
document.getElementById(txtbox).value="";
}
}

cs:
后台在DataList绑定时,给他添加Onclick事件。
protected void MinusItemList_ItemDataBound(object sender, DataListItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{

CheckBox cb = (CheckBox)e.Item.FindControl("MinusItemCB");
HiddenField hf = (HiddenField)e.Item.FindControl("MinusMark");
TextBox tb = (TextBox)e.Item.FindControl("MinusFactMark");
cb.Attributes.Add("onclick", "CheckEvent('"+cb.ClientID+"','"+hf.ClientID+"','"+tb.ClientID+"');");

}

}
搞定!!!

多谢两位的帮助,CSDN,真有高人!
盛米网络 2009-03-12
  • 打赏
  • 举报
回复
建议你使用ASP.NET AJAX里的updatepanel控件,很好用的,去微软官方网站下载ASP.NET AJAX安装 ,然后你的VS里就会都这个控件啦,用起来也很容易的哦。
CutBug 2009-03-12
  • 打赏
  • 举报
回复
<asp:CheckBox ID="MinusItemCB" runat="server"  Checked="false" onclick="setVal(this,this.checked,'<%# DataBinder.Eval(Container, "DataItem.Mark")%>')"/>


function setVal(chk,flag,val)
{
var MinusFactMark = chk.parentNode.nextSibling.childNodes[0];
MinusFactMark.value=flag?val:"";
}

62,267

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧