我有一个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();
}
}
答案 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"));
理论上应该适合你。你描述的副作用让我相信你的代码中还有很多其他时髦的东西。您应该编辑帖子以包含更多代码,以便我们提供更好的答案。