2013-03-05 93 views
3

頁面打開到加載用於編輯/刪除數據的網格。LoadGrid()!IsPostBack中。GridView查詢不顯示

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的字母查詢?

+0

你在什麼時候設置你的數據,以便在哪個PageEvent中? – 2013-03-05 10:20:08

+1

Id的價值是什麼?它不應該是'var id = lbtn.Text'? – codingbiz 2013-03-05 10:20:53

+0

是的,它已經排序該問題,因爲它被設置爲一個LinkBut​​ton。現在它被設置爲我提供的信件。我逐步完成並添加了.ToList()和'count = 0'仍然? – StudentRik 2013-03-05 10:25:11

回答

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實例。

+0

你是一個明星!謝謝 :) – StudentRik 2013-03-11 10:27:51