然后从数据库中填充DropDownList,List项

时间:2011-08-20 03:08:23

标签: asp.net html drop-down-menu

我有一个DropDownList,当表单首次打开时,它会选择数据库中找到的第一个条目。我想要它做的是显示“选择”。但我不希望“选择”消息对我的数​​据库保留任何值(我不希望系统认为这是编辑到数据库中的选项)。

我现在正在尝试的是:

<asp:DropDownList ID="DropDownListEmployee" runat="server"  
                  AutoPostBack="True" 
                  OnSelectedIndexChanged="SelectionHasChanged"
                  DataSourceID="SqlDataSource1" DataTextField="Fullname"  
                  DataValueField="Employee_ID" Width="214px">
    <asp:ListItem>Select</asp:ListItem>

我尝试过使用:

dropdownList.DataBind();
dropdownList.Items.Insert(0, new ListItem("Select")); 

此解决方案将“选择”设置为不属于的txt / data字段,从而导致尝试更新,插入或从数据库中删除时出现问题。

另外,如何编辑我的帖子以显示代码?

================文件后面的代码================

namespace MyProject.Update
{
    public partial class UpdateEmployee : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void SelectionHasChanged(Object sender, System.EventArgs e)
        {

            string connectionString = WebConfigurationManager.ConnectionStrings["DBConnectionString1"].ConnectionString;


            SqlConnection con = new SqlConnection(connectionString);
            SqlCommand cmd = new SqlCommand("Retreive", con);
            cmd.CommandType = CommandType.StoredProcedure;

            cmd.Parameters.Add(new SqlParameter("@ID", SqlDbType.Int, 7));
            cmd.Parameters["@ID"].Value = Convert.ToInt32(DropDownListEmployee.SelectedValue.ToString());


            try
            {
                con.Open();
                SqlDataReader reader = cmd.ExecuteReader();

                if (reader.Read())
                {
                    txt1.Text = (string)reader["1"];
                    txt2.Text = (string)reader["2"];
                    txt3.Text = (string)reader["3"];
                    txt4.Text = (string)reader["4"];
                    txt5.Text = (string)reader["5"];
                    txt6.Text = (string)reader["6"];
                    txt7.Text = (string)reader["7"];
                    txt8.Text = DropDownListEmployee.SelectedValue.ToString();
                }

                reader.Close();

            }

            catch (SqlException err)
            {
                // Replace the error with something less specific.
                // You could also log the error now.
                throw new ApplicationException("Data error.");
            }
            finally
            {
                con.Close();
            }
        }


        protected void UpdateEmployeeBTN_Click(object sender, EventArgs e)
        {
            string connectionString = WebConfigurationManager.ConnectionStrings["DBConnectionString1"].ConnectionString;


            SqlConnection con = new SqlConnection(connectionString);
            SqlCommand cmd = new SqlCommand("Change", con);
            cmd.CommandType = CommandType.StoredProcedure;

            cmd.Parameters.Add(new SqlParameter("@ID", SqlDbType.Int, 7));
            cmd.Parameters["@ID"].Value = Convert.ToInt32(DropDownListEmployee.SelectedValue.ToString());



            cmd.Parameters.Add(new SqlParameter("@1", SqlDbType.VarChar, 20));
            cmd.Parameters["@1"].Value = txt1.Text;

            cmd.Parameters.Add(new SqlParameter("@2", SqlDbType.VarChar, 20));
            cmd.Parameters["@2"].Value = txt2.Text;

            cmd.Parameters.Add(new SqlParameter("@3", SqlDbType.VarChar, 100));
            cmd.Parameters["@3"].Value = txt3_Address.Text;

            cmd.Parameters.Add(new SqlParameter("@4", SqlDbType.VarChar, 100));
            cmd.Parameters["@4"].Value = txt4.Text;

            cmd.Parameters.Add(new SqlParameter("@5", SqlDbType.Char, 12));
            cmd.Parameters["@5"].Value = txt5.Text;

            cmd.Parameters.Add(new SqlParameter("@6", SqlDbType.Char, 12));
            cmd.Parameters["@6"].Value = txt6.Text;

            cmd.Parameters.Add(new SqlParameter("@7", SqlDbType.VarChar, 50));
            cmd.Parameters["@7"].Value = txt7.Text;


            try
            {
                con.Open();
                cmd.ExecuteNonQuery();
                txtID.Text = Convert.ToString(cmd.Parameters["@ID"].Value);
            }
            catch (SqlException err)
            {
                // Replace the error with something less specific.
                // You could also log the error now.
                throw new ApplicationException("Data error.");
            }
            finally
            {
                con.Close();
            }

        }

4 个答案:

答案 0 :(得分:2)

尝试使用AppendDataBoundItems属性:

<asp:DropDownList ID="DropDownListEmployee" runat="server"  
                  AutoPostBack="True" 
                  OnSelectedIndexChanged="SelectionHasChanged"
                  DataSourceID="SqlDataSource1" DataTextField="Fullname"  
                  DataValueField="Employee_ID" Width="214px"
                  AppendDataBoundItems="true">
    <asp:ListItem Value="" Text="Select" />

这将允许您将数据绑定项添加到列表中,而不会影响您之前声明的任何内容。只需确保将任何项目添加到之前中调用DataBind()。

ListControl.AppendDataBoundItems Property

<强> ADDED

根据您粘贴后面的代码,我相信ShankarSangoli和rudeovski ze熊都有适合您的方法。您需要检查以确保用户在DropDownList中进行了选择,如果没有,则抛出错误或提供一些默认值。

答案 1 :(得分:1)

在将数据库插入数据库之前,应在客户端或服务器端验证下拉列表的选定值。我建议你在客户端这样做。

E.g。使用javascript / jquery,您可以检查所选的值。

if($("select[id*=DropDownListEmployee]").val() == "Select"){
   alert("Please select an employee);
   return false;//To prevent the form from submitting.
}

在将数据库插入数据库之前,您还可以检查服务器端的选定值。

答案 2 :(得分:1)

据我所知,看起来你想避免“选择”项目进入数据库。

所以你要做的是,在你的提交活动中,你要检查“DropDownListEmployee”的选择值是否!=“选择”。

您也可以使用提交按钮的javascript / jquery onclientclick执行此操作。

$("#submitButton").click(function () {
    if ($("#DropDownListEmployee").val() == "Select")
       // DO SOMETHING (or return false)
    else 
       return true;
});

在您的代码隐藏按钮点击事件中,执行以下操作:

protected void submitButton_Click(object sender, EventArgs e)
{
    if (DropDownListEmployee.SelectedValue == "Select")
        // DO SOMETHING
    else
        // DO SOMETHING ELSE
}

希望有所帮助

答案 3 :(得分:0)

dropdownList.DataBind(); dropdownList.Items.Insert(0, new ListItem("Select"));理论上应该适合你。你描述的副作用让我相信你的代码中还有很多其他时髦的东西。您应该编辑帖子以包含更多代码,以便我们提供更好的答案。