2010-10-20 3 views
2

Я использую элемент управления SPGridView с элементом управления ObjectDataSource в решении SharePoint 2010. SPGridview позволяет мне сортировать и печатать через элементы списка ОК, но я заметил проблему, когда два элемента управления SPGridView размещены на одной странице. Когда я сортирую нижний элемент управления SPGridView, щелкнув ссылку заголовка столбца, операция сортировки будет успешной. Однако, когда я нажимаю на опции сортировки, доступные в меню ECB в нижнем столбце заголовка SPGridView, сортировка применяется вместо верхнего элемента управления SPGridView.Проблема Сортировка с несколькими SPGridViews

Может ли кто-нибудь предложить исправление или руководство по разрешению этого вопроса?

Thanks, MagicAndi.

ответ

1

Вот поток на MSDN, объясняющий ошибку и разрешение.

http://social.msdn.microsoft.com/Forums/en-US/sharepointdevelopment/thread/af6167a3-21f2-4bb2-94a9-5c22e1aad34d

Вот еще один блог с описанием его, а также - http://sharethefrustration.blogspot.com/2010/02/spgridview-webpart-with-multiple-filter.html

+0

Брайаном, извините за задержку в принятии этого ответа. Я опубликовал свое решение, основанное на ссылках, которые вы предоставили. – MagicAndi

1

Основываясь на ссылки, представленные brian brinley, я придумал это немного более общее решение:

protected override void OnPreRender(EventArgs e) 
{ 
    if (this.HeaderRow != null) 
    { 
     foreach (WebControl control in this.HeaderRow.Controls) 
     {      
      UpdateTemplateClientID(control); 
     }  
    } 

    base.OnPreRender(e); 
} 

private void UpdateTemplateClientID(Control control) 
{ 
    if (control is Microsoft.SharePoint.WebControls.Menu) 
    { 
     Microsoft.SharePoint.WebControls.Menu menuControl = control as Microsoft.SharePoint.WebControls.Menu; 
     string jsFunctionCall = menuControl.ClientOnClickPreMenuOpen; 
     menuControl.ClientOnClickPreMenuOpen = jsFunctionCall.Replace("%TEMPLATECLIENTID%", this.ClientID + "_SPGridViewFilterMenuTemplate"); 
    } 
    else if (control.HasControls()) 
    { 
     foreach (WebControl c in control.Controls) 
     { 
      UpdateTemplateClientID(c); 
     } 
    } 
} 
Смежные вопросы