下拉列表

时间:2015-12-13 21:34:39

标签: c# sql dropdown

我一直在研究这个问题,但似乎我无法理解这一点。所以我有一个名为ddStudent的下拉列表,其中textField值来自我所谓的'学生来自名为'firstName'的列的sql表。现在我使用'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();

        }

现在我的问题是,当我选择它时,是否可以从下拉列表中存储实际的studentID?出于某种原因,当我这样做时,页面会重新加载并为我未选择的学生选择第一个学生ID。我不确定发生了什么。

感谢。

编辑 -

我想确保澄清一下 -

我的学生下拉列表中有3名学生。当我选择学生3(学生ID为3)时,下拉列表中的第一个学生将作为参数传递,我无法说明原因。

2 个答案:

答案 0 :(得分:1)

这个问题对于Dropdownlist控制来说是合乎逻辑的,因为你的下拉列表在从服务器返回时没有渲染一个defaultitem。灵活性非常简单你应该在页面加载时添加一个默认列表项作为默认值/ p>

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

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只是为了告诉下拉列表在绑定数据时包含默认的listitem ..

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

答案 1 :(得分:0)

试试这个

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

然后把你的

BindDropDown();

进入你的回发