DataList 中CheckBox的OnCheckedChanged事件
服务器端事件我已经触发了,但感觉很不爽,一选就刷屏,用户体验不好,想该成客户端事件。
即写一个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 = "";
}
}