2

该页面打开到一个为用户加载的网格以编辑/删除数据。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 = querysays时expanding the results will enumerate the query。我这样做.. Enumeration yielded no results 页面重新加载并且网格永远不会显示?是否与在页面加载时加载的原始网格有关,并且有些冲突?

我已经改变了我的字母表,IsPostBack页面重新加载,字母表消失,网格仍然正常加载。字母查询是否需要不同的网格视图?

4

1 回答 1

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例如在添加链接按钮之间添加实例。

于 2013-03-08T22:29:40.007 回答