根据下拉列表的来源

时间:2013-02-20 18:48:03

标签: asp.net linq

我的网页中有一个下拉列表,其源代码来自代码。现在我想在我的下拉列表中调整1个文本框,当我输入时,下拉列表源(DocumentNo)取决于我在文本框中输入的内容,当文本框为空时,下拉列表显示所有(DocumentNo),请帮助我改变我的代码,

protected void ddlProjectDocument_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {

        var query = from p in _DataContext.tblDocuments
                    orderby p.DocumentNo
                    select p;
        int maxs = 0;
        foreach (tblDocument v in query)
        {
            if (v.DocumentNo.Length > maxs)
                maxs = v.DocumentNo.Length;
        }

        foreach (tblDocument vv in query)
        {
            string doctitle = vv.DocumentNo;
            for (int i = vv.DocumentNo.Length; i < maxs; i++)
            {
                doctitle += "&nbsp;";

            }
            doctitle += "&nbsp;|&nbsp;";
            doctitle += vv.TITLE;
            // Use HtmlDecode to correctly show the spaces
            doctitle = HttpUtility.HtmlDecode(doctitle);
            ddlProjectDocument.Items.Add(new ListItem(doctitle, vv.DocId.ToString()));


        }



    }  

1 个答案:

答案 0 :(得分:0)

首先,我强烈建议将方法开头的查询结果存储到会话变量之类的内容中,以便每次点击此页面时都不必连续查询数据库。

其次,您应该使用ASP.NET中的OnTextChanged事件来解决此问题。放入OnTextChanged属性以指向代码后面的方法,该方法将获取查询结果值(现在在会话变量中找到),并将ddlProjectDocument.Items中包含的内容重置为与所写内容匹配的任何内容。使用String.StartsWith()

var newListOfThings = queryResults.Where(q => q.DocumentNo.StartsWith(MyTextBox.Value));

此时您需要做的就是执行与上述方法结尾相同的循环,以引入正确的格式。