C# 在复选框列表选择中传递两个值的方法
我在学生门户网站上有一个注册向导,学生可以在其中选择每个学年的模块。他们可以选择不同的模块,每个模块都有一定数量的分数,学生根据自己的课程限制一定数量的分数。我有下面的asp.net代码,其中包含该学年所有可用模块的C# 在复选框列表选择中传递两个值的方法,c#,asp.net,webforms,C#,Asp.net,Webforms,我在学生门户网站上有一个注册向导,学生可以在其中选择每个学年的模块。他们可以选择不同的模块,每个模块都有一定数量的分数,学生根据自己的课程限制一定数量的分数。我有下面的asp.net代码,其中包含该学年所有可用模块的复选框列表模块选择 <asp:View ID="semester_1_view" runat="server"> <p>CATS points Required:</p> <asp:DropDownList ID="cat_
复选框列表
模块选择
<asp:View ID="semester_1_view" runat="server">
<p>CATS points Required:</p>
<asp:DropDownList ID="cat_points_total" runat="server" DataSourceID="semester"
DataTextField="cats_points_total" DataValueField="cats_points_total"
Visible="true"></asp:DropDownList>
<asp:CheckBoxList ID="module_choice" runat="server" DataSourceID="semester"
DataTextField="module_name" DataValueField="cats_points"></asp:CheckBoxList>
<asp:Label ID="sem_1_fb" runat="server" Text=""></asp:Label>
<asp:Button ID="sem_1_cat" runat="server" Text="Test" OnClick="sem_1_cat_Click" />
<asp:Button CommandName="NextView" ID="btnnext2" runat="server" Text="Next"
OnClick="btnnext2_Click" />
<asp:Button ID="Button1" runat="server" CommandName="PrevView" Text="Previous"
CssClass="submitbtn" />
</asp:View>
我希望能够运行一次检查,确保总数正确,如果正确,则从每个选择中插入所选的模块id
,并使用类似的内容将其插入到数据库中,但显然目前我没有模块id
信息来执行此操作,只有cats_点
int count = module_choice.Items.Count;
for (int i = 0; i < count; i++)
{
if (moduleselect.Items[i].Selected)
{
string value = module_choice.Items[i].Value;
String query = "INSERT INTO students_vs_modules (user_id, module_id)
VALUES (@user_id, @module_id)";
SqlCommand myCommand = new SqlCommand(query, myConnection);
myCommand.Parameters.AddWithValue("@user_id", user);
myCommand.Parameters.AddWithValue("@module_id", value);
myCommand.ExecuteNonQuery();
}
}
如果我正确理解了您的问题,您希望在复选框列表中为每个列出的
模块名称存储模块id
和猫点数
,选中复选框后,您希望获得所选模块id
和猫点数
开箱即用的复选框列表
有一个数据文本字段
和数据值字段
(表示要显示的文本和相应的值)。您可以扩展复选框列表
控件以保存附加值
但是,最简单的选择是从数据源返回带有分隔符的连接值,并将其用作数据值字段
。现在,当您进行处理时,您可以拆分所选值并保留单独的值(在sem\u 1\u cat\u下单击event)
在您的情况下,cats\u points
和module\u id
可以组合成一个名为mod\u id\u catpoints
的字段(例如,可以是23**345
,其中**
是分隔符)
在这种情况下,mod\u id\u catpoints
将成为您的DataValueField
在sem\u 1\u cat\u Click event
下,您可以将23**345
分为23
和345
,其中23
将是模块id
和245
将是cat\u点
/p>您是如何填充模块选择复选框列表的?@Dinmyte我用数据源更新了我的问题我用于填充模块选项
复选框列表。谢谢。上下文中的module_id是什么?值中的@dinmyte是什么?将有多个选择,因此将有多个值,它们都是从2000开始的4位整数,并随每次插入自动递增。或者你的意思是模块id用于什么?因为它是模块
表中唯一的主键,也用于通过查找表链接其他表,例如学生与模块
,它将学生链接到模块。我希望这有帮助。
int count = module_choice.Items.Count;
for (int i = 0; i < count; i++)
{
if (moduleselect.Items[i].Selected)
{
string value = module_choice.Items[i].Value;
String query = "INSERT INTO students_vs_modules (user_id, module_id)
VALUES (@user_id, @module_id)";
SqlCommand myCommand = new SqlCommand(query, myConnection);
myCommand.Parameters.AddWithValue("@user_id", user);
myCommand.Parameters.AddWithValue("@module_id", value);
myCommand.ExecuteNonQuery();
}
}
<asp:SqlDataSource ID="semester" runat="server"
ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
SelectCommand="SELECT modules.module_id, modules.module_name, modules.module_tutor,
staff_records.f_name, staff_records.l_name, modules.compulsory, modules.year,
modules.cats_points, modules.description, courses.course_name,
student_records.user_id, courses.cats_points_total
FROM modules
INNER JOIN courses_vs_modules ON modules.module_id = courses_vs_modules.module_id
INNER JOIN staff_records ON modules.module_tutor = staff_records.user_id
INNER JOIN courses ON courses_vs_modules.course_id = courses.course_id
INNER JOIN student_records ON courses.course_id = student_records.course_id
WHERE (student_records.user_id = @user_id)"
InsertCommand="INSERT INTO [students_vs_modules]([user_id], [module_id])
VALUES (@user_id, @module_id)">
<InsertParameters>
<asp:Parameter Name="user_id" Type="Int32" />
<asp:Parameter Name="module_id" Type="Int32" />
</InsertParameters>
<SelectParameters>
<asp:QueryStringParameter QueryStringField="user_id" Name="user_id" Type="Int32"></asp:QueryStringParameter>
</SelectParameters>
</asp:SqlDataSource>