我正在根据可能的模块选择显示学生的时间表。 (见截图)目前我在网格视图中显示所有可用模块,学生可以使用复选框进行选择。我已经创建了插入查询以将其选择插入到数据库中。 (2)
但是,每次选中复选框时,我都想检索'ModuleId'以添加到SELECT查询中,该查询显示所选模块的时间表。 (1) 因此,如果用户选中3个复选框,则从所选的每一行中的“ModuleId”将被传递到SELECT查询中。
下面是我的方法,它可以显示特定ModuleId的时间表:
{{1}}
我如何从上面选择查询中使用的复选框中传递所有选定值(ModuleId),如前所述,仅显示我使用的一个模块 'Module.ModuleId =“+ moduleID'?
答案 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,您可以通过查看工具提示轻松知道哪个框适用于哪个模块。