很多情况下,需要将某一个数据库表的字段绑定到一个DropDownList做为筛选的条件,但往往从数据库中读取出的值不够直观或者不合适直接呈现给用户。一个变通的办法,常常是将显示的文本做为辅助字段存在数据库中,但在一些重要的数据库中,因此引入的冗余并不能被许可。
其实一个变通的办法,不需要在数据库中建立辅助字段,还是在页面的程序中进行文本替换,具体方法是,编辑 DropDownList的DataBound事件,比如下例
protected void dropStatus_DataBound(object sender, EventArgs e)
    {
        for(int i=0;i<dropStatus.Items.Count;i++)
            if (dropStatus.Items[i].Text.Trim() == "1")
            {
               dropStatus.Items[i].Text="closed";
            }
            else
                if (dropStatus.Items[i].Text.Trim() == "2")
                {
                    dropStatus.Items[i].Text = "onging";
                }
                else
                    if (dropStatus.Items[i].Text.Trim() == "3")
                    {
                        dropStatus.Items[i].Text = "blocked";
                    }
    }
现在在数据库中 Status 是记录为 1,2,3(为了是排序结果有意义)而对应的文本则是 closed/onging/blocked,采用上面的方法,就能保证每次在这个DropDownList加载时,都进行文本替换。从而使DropDownList更为友善一些。类似的方法也适用于ListBox等控件。