2011-08-20 20 views
1

我有一个DropDownList,当窗体第一次打开时,它选择在数据库中找到的第一个条目。我想要它做的是显示“选择”。但我不希望“选择”消息对我的数​​据库持有任何价值(我不希望系统认为这是编辑到数据库的选项)。DropDownList,列表项然后从数据库popullated

我想要的那一刻是:

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

这个解决方案保存设置“选择”进入它没有TXT /数据字段:

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

我已经尝试使用属于,在尝试更新,插入或从数据库中删除时引发问题。

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

================代码文件================背后

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(); 
      } 

     } 
+0

我一般缩进我的代码4个空格(或更多),以获得格式。 – Tim

+0

该代码严重损坏 – David

回答

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

基于你背后粘贴,相信无论ShankarSangoli和rudeovski泽熊对你有可行的办法的代码ADDED

。您需要检查以确保用户在DropDownList中进行了选择,并且如果它们没有或提供某个默认值,则会引发错误。

0

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

1

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

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

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

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

+0

对不起 - 我添加到您的答案,而不是我的。我删除它。 – Tim

1

从我的理解,它看起来像你想避免“选择”项进入数据库。

因此,您所做的是,在您的提交事件中,您将检查“DropDownListEmployee”的selectedvalue!=“Select”。

你也可以使用提交按钮的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 
} 

希望帮助

+0

嗨,我试图实现顶级解决方案,但我有问题...我所做的是把它变成下面的JavaScript,并将其添加到buttonClick之后并尝试在buttonClick之前添加它。 (#DropDownListEmployee).val()==“Select”) // DO SOMETHING()()函数() \t(“#submitButton”)或返回false) \t返回false; \t else \t return true; }); ' – Nick

+0

你在加载html中的JQuery库吗? 在该代码中,您缺少$(“#dropdownlistemployee”)前的双引号和$符号。val() – jzm

+0

感谢您的帮助! :) – Nick

相关问题