介绍一个刚做的例子吧!
用户在提出问题时需要选择对象机构,而对象机构的分类在一个叫做category的表中保存。下面介绍一下用户从分类下拉框中选择分类后出现机构下拉框。
前台页面中放置两个下拉框:
分类:<asp:dropdownlist id="ddlCategoryid" runat="server" AutoPostBack="True">
</asp:dropdownlist>
AutoPostBack="True" 这个是关键,它的存在将会触发机构下拉框的改变
机构:<asp:dropdownlist id="ddlorgid" runat="server"></asp:dropdownlist>
后台页面代码:
//绑定机构类别信息
if(!this.Page.IsPostBack)
{
DataTable dtCategory = new DataTable(); //新建DataTable用来保存从数据库中取到的数据
CategoryDao cDao = new CategoryDao(); //这里是我用的一个构架,对一个数据库操作类的实例化,以及使用该类的一个方法,不用此方法的朋友可以自己写连接数据库的语句。
dtCategory = cDao.GetCategoryTable(9,true); //检索数据库操作,将检索的数据保存到DataTable实例中。
ddlCategoryid.DataSource = dtCategory; //将数据绑定到分类下拉列表中
ddlCategoryid.DataTextField = "categoryName";
ddlCategoryid.DataValueField = "categoryID";
ddlCategoryid.DataBind();
}
在Web 窗体设计器中需要加入ddlCategoryid的SelectedIndexChanged事件
this.ddlCategoryid.SelectedIndexChanged += new System.EventHandler(this.ddlCategoryid_SelectedIndexChanged);
接下来就是写入SelectedIndexChanged事件的代码:
protected void ddlCategoryid_SelectedIndexChanged(object sender, EventArgs e)
{
//绑定机构信息
DataTable dtOrg = new DataTable();
OrganizationDao orgDao = new OrganizationDao();
dtOrg = orgDao.GetRootOrganizationInfo(Convert.ToInt32(this.ddlCategoryid.SelectedValue.ToString()));
ddlorgid.DataSource = dtOrg;
ddlorgid.DataTextField = "orgname";
ddlorgid.DataValueField = "orgid";
ddlorgid.DataBind();
}
其中this.ddlCategoryid.SelectedValue就是选中的分类的代码。
当然熟悉AJAX的朋友也可以用AJAX的方式实现,而且是不刷新页面(很酷),但是ajax 的实现是需要将所需要的下拉列表内容提前写好的。将需要的资源从数据库中取出来写到一个页面中(当然也可以写到XML中),将该页面引用后就可以实现AJAX的方式了,这个做法原来在用ASP的时候用过,需要从数据库中把可能用到的数据全部提出来,写起来很长,这里就不多说了,感兴趣的朋友可以告诉我,有时间把它翻出来给大家