Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在复选框列表选择中传递两个值的方法_C#_Asp.net_Webforms - Fatal编程技术网

C# 在复选框列表选择中传递两个值的方法

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.net代码,其中包含该学年所有可用模块的
复选框列表
模块选择

<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>