我在学生门户网站上有一个注册向导,学生可以在每个学年选择他们的模块。他们有各种模块可供选择,每个模块都有许多分数,学生根据自己的课程要求限制在一定数量的分数。我在下面的asp.net代码中包含该学年所有可用模块的CheckBoxList
module_choice
。
<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>
目前只传递了cats_points
我还想要一些方法来传递所选项目的module_id
。
然后我有以下C#来计算所选择的猫点总数,并提供反馈是否所选总数等于所需总数。
protected void sem_1_cat_Click(object sender, EventArgs e)
{
int catselected = 0;
for (int i = 0; i < module_choice.Items.Count; i++)
{
if (module_choice.Items[i].Selected)
{
string value = module_choice.Items[i].Value;
catselected += int.Parse(value);
}
}
int cattotal = int.Parse(cat_points_total.SelectedValue);
int catcalc = cattotal - catselected;
int zero = 0;
if (catcalc != zero)
{
sem_1_fb.Visible = true;
sem_1_fb.Text = "<b> Not Enough Points</b> cattotal =" + cattotal + " catselected =" + catselected + " catcalc =" + catcalc +".";
}
else
{
sem_1_fb.Visible = true;
sem_1_fb.Text = "<b>Point Criteria Met</b> cattotal =" + cattotal + " catselected =" + catselected + " catcalc =" + catcalc +".";
}
}
我希望能够检查总数是否正确以及是否将每个选择中的选定module_id
插入到具有类似内容的数据库中,但显然目前我还没有module_id
仅提供cats_points
;
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();
}
}
我非常感谢任何帮助,因为我对C#还不熟悉
这是我用来填充module_choice
CheckBoxList
<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>
答案 0 :(得分:0)
如果我正确理解了您的问题,您希望存储module_id
&amp; CheckBoxList&amp;中每个列出的cat_points
module_name
在选择要获取所选module_id
&amp;的复选框时cat_points
。
开箱即用CheckBoxList
有一个DataTextField
和DataValueField
(代表要显示的文字和相应的值)。您可以扩展CheckBoxList
控件以保留其他值。
但最简单的选择是使用数据源中的分隔符返回连接值,并将其用作DataValueField
。现在,当您处理时,您可以拆分选定的值并获取单独的值(在sem_1_cat_Click
事件下)
在您的情况下cats_points
&amp; module_id
可以合并到一个名为mod_id_catpoints
的字段中(例如23**345
,其中**
是分隔符)
在这种情况下,mod_id_catpoints
将是您的DataValueField
在sem_1_cat_Click event
下,您会将23**345
分为23
和345
23
module_id
和245
是cat_points