2013-02-19 117 views
1

我已經使用下面的代碼來加載和SelectedIndexChanged我的下拉列表。 當我更改下拉列表的值時,需要很長時間直到它在我的頁面的標籤中顯示值。SelectedIndexChanged需要很多時間

Label1.Text = "Review Number:" + newReview + "(for preparing of Rev." + newRev; 


protected void ddlProjectDocument_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    _DataContext = new EDMSDataContext(); 

    int newRev; 
    int newReview; 

    var x = ddlProjectDocument.SelectedValue; 

    var MaxRev = (from rev in _DataContext.tblTransmittalls 
        where rev.DocID.ToString() == ddlProjectDocument.SelectedValue 
        select rev.REV).Max(); 

    if (MaxRev == null) 
    { 
     newRev = 0; 
    } 
    else 
    { 
     newRev = Convert.ToInt32(MaxRev) + 1; 
    } 

    var MaxReview = (from rev in _DataContext.tblFiles 
        where (rev.DocId.ToString() == ddlProjectDocument.SelectedValue) && 
          (rev.Rev.ToString() == MaxRev) 
        select rev.Review).Max(); 

    if (MaxReview == null) 
    { 
     newReview = 1; 
    } 
    else 
    { 
     newReview = Convert.ToInt32(MaxReview) + 1; 
    } 

    Label1.Text = "Review Number:" + newReview + "(for preparing of Rev." + newRev;  
} 

protected void ddlProjectDocument_Load(object sender, EventArgs e) 
{ 
    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())); 
    } 
} 
+0

讓我問你:該頁面是否有很多視圖狀態的重量級內容。如果不是這樣的話,DOCID會在數據庫中對它進行索引嗎? – adt 2013-02-19 18:34:46

+3

這可能是因爲'rev.DocID.ToString()'。據我所知,你是拉下整個表,因爲每個記錄必須轉換爲一個字符串。我建議將'ddlProjectDocument.SelectedValue'轉換爲'int',以便可以在數據庫中完成比較。 – 2013-02-19 18:35:25

回答

0

請嘗試以下代碼。我重構它看起來更緊湊,並移除了LINQ查詢.ToString(),避免拉低不需要的數據:

protected void ddlProjectDocument_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    using(_DataContext = new EDMSDataContext()) 
    { 
     int x = Convert.ToInt32(ddlProjectDocument.SelectedValue); 

     var MaxRev = _DataContext.tblTransmittalls.Where(rev => rev.DocID == x).Max(rev => rev.REV);  
     int newRev = (MaxRev == null) ? 0 : Convert.ToInt32(MaxRev) + 1; 

     var MaxReview = _DataContext.tblFiles.Where(rev => rev.DocId == x && rev.Rev == MaxRev).Max(rev => rev.Review);    
     int newReview = (MaxReview == null) ? newReview = 1 : Convert.ToInt32(MaxReview) + 1;  

     Label1.Text = "Review Number:" + newReview + "(for preparing of Rev." + newRev;  
    } 
} 

我已經改變了你查詢到拉姆達格式,並設置在DataContext的爲好。

+0

感謝,比以前更好(30秒),現在需要20秒,我的下拉列表有18000條記錄,看起來下載列表的加載也有問題,因爲在頁面加載需要時間,並在第一時間來到和其他元素來6秒後。 – masoud 2013-02-19 20:22:47

+1

重啓我的電腦後需要6秒鐘(非常感謝) – masoud 2013-02-19 20:28:23