ASP.NET从Checkbox onCheckChanged检索值

时间:2017-04-21 01:11:10

标签: asp.net

我正在根据可能的模块选择显示学生的时间表。 (见截图)目前我在网格视图中显示所有可用模块,学生可以使用复选框进行选择。我已经创建了插入查询以将其选择插入到数据库中。 (2)

但是,每次选中复选框时,我都想检索'ModuleId'以添加到SELECT查询中,该查询显示所选模块的时间表。 (1) 因此,如果用户选中3个复选框,则从所选的每一行中的“ModuleId”将被传递到SELECT查询中。

GridView Screenshot

下面是我的方法,它可以显示特定ModuleId的时间表:

{{1}}

我如何从上面选择查询中使用的复选框中传递所有选定值(ModuleId),如前所述,仅显示我使用的一个模块  'Module.ModuleId =“+ moduleID'?

1 个答案:

答案 0 :(得分:1)

要完成您要高效完成的工作并且没有大的foreach循环,您需要更改用户将数据输入到gridview的整个方式。

我相信您应该使用GridViews OnRowUpdating事件,当更新行时,使用此事件您已经拥有了哪一行已更改的上下文。 e.RowIndex - 获取正在更新的行的索引

利用此活动需要对网格视图字段进行一些重新设计。您需要在每个EditItemTemplate中添加TemplateField标记添加CommandField并使用{{1}重写你的更新事件。它的大量信息可以在答案中发布,这些信息可以帮助您开始充分利用GridView事件。

另外,您应该在sql中使用参数化查询。

修改

根据您的澄清,您需要为每个复选框检索moduleid,我将做一些假设,以便在没有一些调整的情况下可能无效。

首先尝试这个:

OnRowUpdating

使用<asp:TemplateField> <ItemStyle HorizontalAlign="Center" Width="40px"></ItemStyle> <ItemTemplate> <asp:CheckBox ID="chkRow" runat="server" ToolTip='<%# Eval("ModuleId") %>' OnCheckedChanged="module_Changed" /> </ItemTemplate> 在GridView.DataBind()函数期间,将使用'<%# Eval("ModuleId") %>'值填充工具提示以获取复选框。我假设列名正好是“ModuleId”

然后在后面的代码中,您可以读取复选框的工具提示值,如下所示:

ModuleID

现在,当gridview加载所有复选框时,有一个工具提示填充了ModuleID,您可以通过查看工具提示轻松知道哪个框适用于哪个模块。