我写了如下一段程序,想用DropDownList中的项来控制显示ListBox中的内容,但是现在DropDownList中的项改变时,ListBox中的内容不变,是怎么回事呢?是不是没有写 DropDownList的Index_Changed函数呢?请求指教,谢谢DropDownList NewsKindList;
ListBox NewsList;private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面// 绑定下拉列表框(新闻种类)
     BindNewsKindData(); 
           
// 绑定列表框(新闻)
     if(NewsKindList.Items.Count>0)
     {
BindNewsData(Int32.Parse(NewsKindList.SelectedValue));
     }
}
//绑定DropDownList NewsKindList
private void BindNewsKindData()
{
//清空DropDownList控件的老数据
    NewsKindList.Items.Clear();
//从数据库获取NewsKinds表的数据
    string sqlstring;
    sqlstring="select * from NewsKinds ORDER BY KindOrder";

    SqlCommand myCommand=new SqlCommand(sqlstring,myConnection);
    myConnection.Open();
    SqlDataReader myDataReader;
    myDataReader=myCommand.ExecuteReader(CommandBehavior.CloseConnection);
    //设定DropDownBox控件的数据源,并且设定Text和Value属性
    NewsKindList.DataSource=myDataReader;
    NewsKindList.DataTextField="KindName";
    NewsKindList.DataValueField="NewsKindID";
    NewsKindList.DataBind();
    //关闭读取器和数据库的连接
    myDataReader.Close();
}//绑定ListBox NewsList
private void BindNewsData(int nNewsKindID)
{
//清空News列表中的原始数据
    NewsList.Items.Clear();
//从数据库中取到数据,并为News列表构造数据源
    string sqlstring;
    sqlstring="select * from news where NewsKindID='"+nNewsKindID.ToString()+"'";
    SqlCommand myCommand=new SqlCommand(sqlstring,myConnection);
    myConnection.Open();
    SqlDataReader myDataReader;
    myDataReader=myCommand.ExecuteReader(CommandBehavior.CloseConnection);
    //绑定控件的数据
    while(myDataReader.Read())
    {
        NewsList.Items.Add(new ListItem(FormatTitle(myDataReader["title"].ToString()),myDataReader["ID"].ToString()));
    }
    myDataReader.Close();
}
感觉好像是没有写DropDownList的Index_Changed函数,该怎么写呢?谢谢

解决方案 »

  1.   

    是要写的
    public void Index_Changed(object sender, EventArgs e)
        {
    /////////
        }
    this.NewsKindList.SelectedIndexChanged+=new System.EventHandler(Index_Changed);
      

  2.   

    有没有加autopostback="True"?
    并且runat="Server"
      

  3.   

    还是不行,产生的错误如下:编译器错误信息: CS0122: 不可访问“mynews.admin.Index_Changed(object, System.EventArgs)”,因为它受保护级别限制第21行有错误行 21:                                       Height="16px" Width="216px">请选择所属的(新闻种类)</asp:label><asp:dropdownlist id="NewsKindList" AutoPostBack="True" OnSelectedIndexChanged="Index_Changed" style="Z-INDEX: 108; LEFT: 248px; POSITION: absolute; TOP: 112px"
    行 22:  runat="server" Height="32px" Width="200px"></asp:dropdownlist><asp:listbox id="NewsList" style="Z-INDEX: 109; LEFT: 248px; POSITION: absolute; TOP: 168px"
      

  4.   

    public void Index_Changed(object sender, EventArgs e) //你这不是 public 的吧....加上就好了...
      

  5.   

    果然是忘了写public了,现在编译已经通过了,不过在DropDownList中,默认的是第一项,当我打开下拉菜单,选中第二项后,还是跳回到第一项。怎么回事呢?
      

  6.   

    那可能是因为你在page_load里面每次都对它赋值的原故吧.
    如果这样,那么请把此过程写在
    if(!this.ispostback())
    {}