GridView查询不显示

时间:2013-03-05 10:00:52

标签: c# asp.net linq

该页面将打开一个网格,供用户加载以编辑/删除数据。LoadGrid()位于!IsPostBack

private void LoadGrid()
{
try
{
    using (var db = new dbDataContext())
    {
        var loadGrid = from t in db.tbl_Providers
                        where t.provider_Deleted == false
                        orderby t.provider_Name.ToLower()
                        select new
                            {
                                t.ProviderId,
                                t.provider_Name,
                            };

        grd_Provider.DataSource = loadGrid;

        grd_Provider.DataBind();
    }
    // Set value of Edit/Delete columns on grid
    // ========================================
    grd_Provider.HeaderRow.Cells[0].Text = "Edit/Update";
    grd_Provider.HeaderRow.Cells[1].Text = "Delete";

}
catch (SystemException ex)

所有这些代码都运行良好。 我要做的是显示字母表,用户点击链接,然后重新加载新查询并加载网格。

据我所知,字母表工作正常。我在Page_Load上加载了代码,而Void方法则在页面的下方。

for (char asciiValue = 'A'; asciiValue <= 'Z'; asciiValue++)
{
LinkButton lnkCharacter = new LinkButton();
lnkCharacter.ID = "lnkCharacter" + asciiValue;
lbl_Alphabet.Controls.Add(lnkCharacter);
lnkCharacter.CommandArgument = Convert.ToString(asciiValue);
lnkCharacter.Command += lnkCharacter_Command;

lnkCharacter.Text = Convert.ToString(asciiValue) + " ";
}

void lnkCharacter_Command(object sender, CommandEventArgs e)
{
    try
    {
        var lbtn = (LinkButton) lbl_Alphabet.FindControl("lnkCharacter" + e.CommandArgument);
        var id = lbtn.Text;

        using (var db = new dbDataContext())
        {
            var query = from n in db.tbl_Providers
                        where n.provider_Name.StartsWith(id) && n.provider_Deleted == false
                        select new
                            {
                               id = n.ProviderId,
                               name = n.provider_Name
                            };

            grd_Provider.DataSource = query;
            grd_Provider.DataBind();
        }
    }
    catch (SystemException ex)
    {
        var exceptionUtility = new genericExceptions();
        exceptionUtility.genericSystemException(
            ex,
            Server.MachineName,
            Page.TemplateSourceDirectory.Remove(0, 1) +   Page.AppRelativeVirtualPath.Remove(0, 1),
            ConfigurationManager.AppSettings["emailSupport"],
            ConfigurationManager.AppSettings["emailFrom"],
            string.Empty);
    }
}

我已经在LINQPad中测试了查询,它可以工作并返回结果。 当我在页面上运行它并逐步完成Datasource = queryexpanding the results will enumerate the query时。 我这样做.. Enumeration yielded no results 页面重新加载,网格永远不显示? 是否与页面加载时加载的原始网格有关,还有一些有冲突?

我已将我的字母更改为IsPostBack并且页面重新加载并且字母表消失,网格仍然正常加载。字母查询是否需要不同的gridview?

1 个答案:

答案 0 :(得分:1)

这就是我的样子:

您有以下代码:

lnkCharacter.Text = Convert.ToString(asciiValue) + " ";

然后你有这个代码:

var lbtn = (LinkButton) lbl_Alphabet.FindControl("lnkCharacter" + e.CommandArgument);
var id = lbtn.Text;

最后,你有这个代码:

      var query = from n in db.tbl_Providers
                    where n.provider_Name.StartsWith(id) && n.provider_Deleted == false
                    select new
                        {
                           id = n.ProviderId,
                           name = n.provider_Name
                        };

当您进入LINQ查询时, id 的值将在末尾有一个空格。因此,如果您点击“A”链接按钮,则不会搜索以"A"开头的所有内容,而是搜索以"A "开头的所有内容。

您需要在检索时调整lbtn.Text,或使用其他方法确保字母超链接之间的空格,例如在添加链接按钮之间添加Literal实例。