下拉列表中的商店 ID

Store ID from a dropdown list

我已经研究了一段时间,但似乎无法解决这个问题。所以我有一个名为 ddStudent 的下拉列表,其中 textField 值来自 sql table 我从名为 'firstName' 的列中创建了名为“Student”的列表。现在我使用 'studentID' 作为值字段。

这是我遇到问题的地方。我想执行以 studentID 作为参数的存储过程,但我不明白如何将实际的学生 ID 存储到参数中。

这是我目前所拥有的-

protected void btnRegister_Click(object sender, EventArgs e)
    {
        int selValClass = Convert.ToInt32(ddClassNames.SelectedValue);
        int selValStudent = Convert.ToInt32(ddStudents.SelectedValue);

        using (SqlConnection con = new SqlConnection(CS))
        {
            SqlCommand cmd = new SqlCommand("procRegStudent", con);
            cmd.CommandType = CommandType.StoredProcedure;

            cmd.Parameters.AddWithValue("@studentID", selValStudent);
            cmd.Parameters.AddWithValue("@classID", selValClass);

            con.Open();
            cmd.ExecuteNonQuery();
            con.Close();

        }

这是我的数据绑定代码-

 using (SqlConnection con = new SqlConnection(CS))
        {
            SqlCommand cmd = new SqlCommand("SELECT studentID, firstName, lastName, ssn, address, city, state, zip FROM Student ", con);

            con.Open();

            ddStudents.DataSource = cmd.ExecuteReader();
            ddStudents.DataTextField = "firstName";
            ddStudents.DataValueField = "studentID";
            ddStudents.DataBind();

        }

现在我的问题是,当我 select 时,有没有一种方法可以存储下拉列表中的实际学生 ID?出于某种原因,当我这样做时,页面会重新加载并且 select 是我没有 select 的学生的第一个学生 ID。我不太确定发生了什么。

谢谢。

编辑-

我想确认一下-

我的学生下拉列表中有 3 名学生。当我 select 学生 3(学生 ID 为 3)时,下拉列表中的第一个学生被作为参数传递,我不知道为什么。

这个问题对于 Dropdownlist 控件来说是合乎逻辑的,因为当它从 server.The 返回时,您的下拉列表缺少要呈现的默认项 解决方案非常简单,您应该添加一个默认列表项作为默认值页面加载

这里我做了一个简单的例子来说明我们如何解决这个问题:

在Page.aspx:

    <asp:DropDownList ID="ddStudents" runat="server" DataTextField = "firstName" DataValueField = "studentID" AppendDataBoundItems="true">
        <asp:ListItem Text="===Select Student===" Value="0"></asp:ListItem>

    </asp:DropDownList> 

    <asp:Button ID="btnRegister" runat="server" Text="Register" OnClick="btnRegister_Click" />
    <asp:Label ID="lblMessage" runat="server" Text="Label"></asp:Label>

在Page.aspx.cs:

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            BindDropDown();

        }

    }

    private void BindDropDown()
    {
        DataTable dt = new DataTable();
        dt.Columns.Add("studentID", typeof(int));
        dt.Columns.Add("firstName", typeof(string));

        dt.Rows.Add(dt.NewRow());
        dt.Rows[0]["studentID"] = 1;
        dt.Rows[0]["firstName"] = "Markus";


        dt.Rows.Add(dt.NewRow());
        dt.Rows[1]["studentID"] = 2;
        dt.Rows[1]["firstName"] = "Arthur";


        ddStudents.DataSource = dt;
        ddStudents.DataBind();
    }

    protected void btnRegister_Click(object sender, EventArgs e)
    {
        if (ddStudents.SelectedIndex > 0)
        {
            lblMessage.Text = String.Format("You selected {0} with Number : {1}", ddStudents.SelectedItem.Text,ddStudents.SelectedValue);
        }
    }

提示: 我将下拉列表 AppendDataBoundItems 属性 标记为 true 只是告诉下拉列表在数据绑定时包含默认列表项..

希望我的代码能帮助您解决问题:)

试试这个

int selValStudent = int.Parse(this.ddStudents.SelectedValue);

然后把你的

绑定下拉();

进入你的回传