C# 在asp.net中,DDL的选定索引始终等于零

C# 在asp.net中,DDL的选定索引始终等于零,c#,.net,asp.net,drop-down-menu,selectedindexchanged,C#,.net,Asp.net,Drop Down Menu,Selectedindexchanged,我有一个程序类,属性为Id、ProgramName、ShortName和Code,im我的应用程序 我有一个类似ASP的DDL <asp:DropDownList ID="DDLProgram" runat="server" OnSelectedIndexChanged ="OnDDLProgramChanged" AutoPostBack = "true"> </asp:DropDownList> 我的OnDDLProgramCh

我有一个程序类,属性为Id、ProgramName、ShortName和Code,im我的应用程序 我有一个类似ASP的DDL

<asp:DropDownList ID="DDLProgram" runat="server" 
            OnSelectedIndexChanged ="OnDDLProgramChanged" AutoPostBack = "true">
    </asp:DropDownList>

我的OnDDLProgramChanged方法定义为

protected void OnDDLProgramChanged(object sender, EventArgs e)
        {
            List<CcProgramEntity> programEntities = GetAllPrograms();

            DDLProgram.DataSource = programEntities;
            DDLProgram.DataTextField = "Shortname";
            DDLProgram.DataValueField = "Id";

            //My Problem goes here
            string programCode = programEntities[DDLProgram.SelectedIndex].Code;
        }
programmchanged(对象发送方,事件参数e)
{
List programEntities=GetAllPrograms();
DDLProgram.DataSource=程序实体;
DDLProgram.DataTextField=“Shortname”;
DDLProgram.DataValueField=“Id”;
//我的问题就在这里
字符串programCode=programEntities[DDLProgram.SelectedIndex].Code;
}
我的名单上的所有记录都是正确的,我已经检查过了。但每当我在DDL中更改一个项目时,所选索引都不会更改。所选索引仍为零。因此,除了0索引的项目外,我无法获取其他项目的代码


在这种情况下,有人能帮我吗?

您正在
selectedIndex更改事件中再次绑定数据,重新绑定后它将重置当前selectedIndex。您不需要将数据重新绑定到
SelectedIndex Change Event

应该是这样的

protected void OnDDLProgramChanged(object sender, EventArgs e)
    {

        string programCode = programEntities[DDLProgram.SelectedIndex].Code;
    }

您将在
selectedIndex更改事件中再次绑定数据,重新绑定后它将重置当前selectedIndex。您不需要将数据重新绑定到
SelectedIndex Change Event

应该是这样的

protected void OnDDLProgramChanged(object sender, EventArgs e)
    {

        string programCode = programEntities[DDLProgram.SelectedIndex].Code;
    }

您必须将数据绑定到页面加载方法上的DropDownList

if (!IsPostBack)
{
    DDLProgram.DataSource = programEntities;
    DDLProgram.DataTextField = "Shortname";
    DDLProgram.DataValueField = "Id";
    DDLProgram.DataBind();
}

否则每次都会绑定数据,因此清除选择

您必须将数据绑定到页面加载时的DropDownList方法

if (!IsPostBack)
{
    DDLProgram.DataSource = programEntities;
    DDLProgram.DataTextField = "Shortname";
    DDLProgram.DataValueField = "Id";
    DDLProgram.DataBind();
}

否则,它将每次绑定数据并因此清除选择

为什么要在
OnDDLProgramChanged
中分配数据源,这将重置您所做的选择。

为什么要在
OnDDLProgramChanged
中分配数据源,这将重置您所做的选择。

您是否有
IsPostBack
检查页面加载?您是否有
IsPostBack
检查页面加载?@Eranga:Thanx对于解决方案,它对我非常有效。但现在只有在我更改项目时才会发生。如果我想让它在第一次加载页面时工作,该怎么办?我的页面中有不止一个DDL,我正在使用Bind DDLs()方法绑定所有DDL。我叫这个M@Pankouri你所说的
是什么意思?只有在我更改项目时才会发生
?您是
onddlprogrammchanged
中的下拉列表吗?@Eranga:Thanx对于解决方案,它对我非常有效。但现在只有在我更改项目时才会发生。如果我想让它在第一次加载页面时工作,该怎么办?我的页面中有不止一个DDL,我正在使用Bind DDLs()方法绑定所有DDL。我叫这个M@Pankouri你所说的
是什么意思?只有在我更改项目时才会发生
?你是
OnDDLProgramChanged
中的下拉列表吗?谢谢你的建议,我修改了我的代码,现在看起来更整洁了谢谢你的建议,我修改了我的代码,现在看起来更整洁了