我有一个包含2个模板字段的gridview,一个是复选框,另一个是下拉列表。如果用户选中该复选框,我希望能够显示该行的下拉列表。
<asp:TemplateField HeaderText="Follow-up Needed" ItemStyle-Width="75px">
<ItemStyle HorizontalAlign="Center" />
<ItemTemplate>
<asp:CheckBox ID="CBFollowUp" runat="server" AutoPostBack="true"/>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Follow-Up Assignment" ItemStyle-Width="100px">
<ItemStyle HorizontalAlign="Center" />
<ItemTemplate>
<asp:DropDownList ID="DropDownListFollowUpUser" runat="server" Visible="false"></asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
我试图将逻辑放在RowDataBound中,但是在回发中我丢失了复选框选择,但是如果我在我的Databind上执行!isPostBack,那么当选中一个复选框时它不会触发RowDataBound。
我不知道我需要在哪里以及使用什么逻辑来制作这个流畅的,我是否需要在OnCheckedChanged或javascript中进行此操作?
感谢您的任何反馈。
答案 0 :(得分:0)
一种选择是像你想象的那样使用OnCheckChanged
事件。首先将它添加到CheckBox。
<asp:CheckBox ID="CBFollowUp" runat="server"
AutoPostBack="true"
OnCheckChanged="CBFollowUp_CheckChanged" />
然后在你的代码隐藏中处理它。在这里,您会发现DropDownList与您刚刚单击的CheckBox位于同一行,然后根据需要隐藏/显示它。
protected void CBFollowUp_CheckChanged(object sender, EventArgs e)
{
CheckBox CBFollowUp = (CheckBox)sender;
GridViewRow row = (GridViewRow)CBFollowUp.NamingContainer;
DropDownList DropDownListFollowUpUser = (DropDownList)row.FindControl("DropDownListFollowUpUser");
DropDownListFollowUpUser.Visible = CBFollowUp.Checked;
}