C# ';选择索引';和';选择的值';属性是相互排斥的

C# ';选择索引';和';选择的值';属性是相互排斥的,c#,asp.net,drop-down-menu,C#,Asp.net,Drop Down Menu,老实说,这是我第一次看到这样的错误 The 'SelectedIndex' and 'SelectedValue' attributes are mutually exclusive 这就是错误发生的地方。它发生在数据绑定处 protected void FillDropdown(DropDownList ddl) { using (var connAdd = new SqlConnection("Data Source = localhost; Initial Catalog = M

老实说,这是我第一次看到这样的错误

The 'SelectedIndex' and 'SelectedValue' attributes are mutually exclusive
这就是错误发生的地方。它发生在数据绑定处

protected void FillDropdown(DropDownList ddl)
{
    using (var connAdd = new SqlConnection("Data Source = localhost; Initial Catalog = MajorProject; Integrated Security= SSPI"))
    {
        connAdd.Open();

        var sql = "Select policeid from PoliceAccount where status ='available' and handle ='offcase' and postedto='" + ddllocation.SelectedValue + "'";
        using (var cmdAdd = new SqlDataAdapter(sql, connAdd))
        {
            DataSet ds2 = new DataSet();
            cmdAdd.Fill(ds2);

            ddl.Items.Clear();
            ddl.DataSource = ds2;
            //error occurs here
            ddl.DataBind();
            ddl.Items.Insert(0, new ListItem("Police ID", ""));
            ddl.SelectedIndex = 0;
        }
    }
}
我不太清楚他们为什么会说这样的话。我在我的下拉列表中使用了这个填充下拉列表

protected void ddlpid1_SelectedIndexChanged(object sender, EventArgs e)
{
    if (ddlpid1.SelectedIndex > 0)
    {
        Session["pid1"] = ddlpid1.SelectedValue;

        ListItem removeItem2 = ddlpid2.Items.FindByValue(ddlpid1.SelectedValue);
        ddlpid2.Items.Remove(removeItem2);
        ListItem removeItem3 = ddlpid3.Items.FindByValue(ddlpid1.SelectedValue);
        ddlpid3.Items.Remove(removeItem3);
        ListItem removeItem4 = ddlpid4.Items.FindByValue(ddlpid1.SelectedValue);
        ddlpid4.Items.Remove(removeItem4);
        ListItem removeItem5 = ddlpid5.Items.FindByValue(ddlpid1.SelectedValue);
        ddlpid5.Items.Remove(removeItem5);
    }
    else if (ddlpid1.SelectedItem.Text.Equals("Police ID"))
    {
        FillDropdown(ddlpid1);
        FillDropdown(ddlpid2);
        FillDropdown(ddlpid3);
        FillDropdown(ddlpid4);
        FillDropdown(ddlpid5);

        ddlpid2.SelectedValue = (String) Session["pid2"];
        ddlpid2_SelectedIndexChanged(this, EventArgs.Empty);

        ddlpid3.SelectedValue = (String) Session["pid3"];
        ddlpid3_SelectedIndexChanged(this, EventArgs.Empty);

        ddlpid4.SelectedValue = (String) Session["pid4"];
        ddlpid4_SelectedIndexChanged(this, EventArgs.Empty);

        ddlpid5.SelectedValue = (String) Session["pid5"];
        ddlpid5_SelectedIndexChanged(this, EventArgs.Empty);
    }
}

我多次查看代码,发现selectedindex和selected值发生冲突。所有这些函数都作为单独的函数单独工作。

在将
SelectedIndex设置为
-1
之前,它应该有助于检查数据集DS2是否有值。 如果它有一些policyid作为值,那么添加这两行并绑定它

ddl.DataSource = ds2;
ddl.DataTextField = "policeid";
ddl.DataValueField = "policeid";
ddl.DataBind();

网上已经有类似的问题了


原因是在
Page\u Load
事件中设置了
SelectedIndex
SelectedValue
属性。

如果在DataBind()调用之前设置了SelectedValue,也会发生这种情况。

您可以在

ddlst.SelectedIndex = -1;
if (ddlst.SelectedValue.Length>0)
{
    ddlst.SelectedValue.Remove(0);
}

我在标题中写了它,但我将把它带到问题部分代码的哪一行/部分给出了这个错误?我添加了一个注释行,显示了错误。这是在数据绑定。从我所能告诉它是由于调用FillDropdown(ddlpid2);将设置SelectedIndex值,然后调用ddlpid2.SelectedValue=(字符串)会话[“pid2”];哪些设置了SelectedValue,而您在单个事件中可能不会这样做@astander-但他在FillDropdown函数数据绑定行中出错,在这行之前他没有设置所选索引或所选值。在这一行之后,一切都设置好了。这正是导致我出错的原因。SelectedValue是在代码中设置的,但我没有在任何地方调用DataBind,因此这是在页面生命周期中的常规点处理的。该错误仅在数据绑定期间发生,标记中没有我的代码。在设置SelectedValue之前立即手动调用DataBind可避免此错误。