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 = query私がページ上でそれを実行し、言うことをステップスルーすると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 に答える