编辑页面上下拉列表中的重复项

duplicate items in dropdownlist on an edit page

我有一个页面要编辑 user profile。在页面加载时,数据会加载到给定 userid 的页面。问题是下拉列表有一个重复项 [= =25=] 如下所示:

这是我的代码:

 protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        //btnReset.Visible = false;
        BindDisabilityDropDown();
        BindGenderDropDown();
        BindStateDropDown();
        ExtractUserData();
    }
 }
 protected void BindGenderDropDown()
{
    string CS = ConfigurationManager.ConnectionStrings["ss"].ConnectionString;
    using (SqlConnection con = new SqlConnection(CS))
    {
        con.Open();
        SqlCommand cmd = new SqlCommand("select * from tblGenders", con);
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        DataSet ds = new DataSet();
        da.Fill(ds);
        ddlGender.DataSource = ds;
        ddlGender.DataTextField = "GenderName";
        ddlGender.DataValueField = "GenderId";
        ddlGender.DataBind();
    }
    ddlGender.Items.Insert(0, new ListItem("---Select---", "0"));
    ddlGender.SelectedIndex = 0;
}
 private void ExtractUserData()
{
    string CS = ConfigurationManager.ConnectionStrings["ss"].ConnectionString;
    using (SqlConnection con = new SqlConnection(CS))
    {
        con.Open();
        SqlCommand cmd = new SqlCommand("Select * from tblAllUsers where UserId='PL00012'", con);
        SqlDataReader rdr = cmd.ExecuteReader();
        while (rdr.Read())
        {
            string path = rdr["ProfilePicPath"].ToString();
            hfImagePath.Value = Path.GetFileName(path);
            lblUserId.Text = rdr["UserId"].ToString();
            txtFName.Text = rdr["FirstName"].ToString();
            txtLName.Text = rdr["LastName"].ToString();
            txtEmailAddress.Text = rdr["EmailAdd"].ToString();
            txtContactNumber.Text = rdr["MobileNo"].ToString();
            txtdob.Value = rdr["DOB"].ToString();
            txtStreetAddress.Text = rdr["StreetAddress"].ToString();
            txtZipCode.Text = rdr["ZipCode"].ToString();
            ddlGender.SelectedItem.Text = rdr["Gender"].ToString();
            ddlDisabled.SelectedItem.Text = rdr["Disabled"].ToString();
            ddlState.SelectedItem.Text = rdr["State"].ToString();
            ddlCity.SelectedItem.Text = rdr["City"].ToString();
        }
    }

我猜是,下拉列表由 BindGenderDropDown() 加载,然后 SelectedItemExtractData() 再次添加。那么我怎样才能避免不需要的添加呢?

可能对你有帮助。

if (ddlGender.Items.Contains(ddlGender.Items.FindByText(rdr["Gender"].ToString())))
            {
                ddlGender.Items.FindByText(rdr["Gender"].ToString()).Selected = true;
            }

在您的例子中,ddlGender.SelectedItem.Text = rdr["Gender"].ToString(); 正在更改所选索引的文本,因此它将 --Select-- 更改为 Your Selected Value

对于在下拉列表中选择项目,我建议使用以下代码。

ddlGender.SelectedValue = rdr["GenderId"].ToString();

您可以在 ExtractUserData() 方法中选择 DropdownList SelectedItem 时执行以下操作:

ddlGender.SelectedIndex = ddlGender.Items.IndexOf(ddlGender.Items.FindByText(rdr["Gender"].ToString()));

您的代码 ddlGender.SelectedItem.Text = rdr["Gender"].ToString(); 显示 ---Select---rdr["Gender"].ToString()。此代码不会更改项目,而只会选择项目。