2015-05-20 2 views
0
<asp:UpdatePanel runat="server" ClientIDMode="Static" ID="TasksUpdatePanel" UpdateMode="Conditional"> 
    <ContentTemplate> 
     <asp:Panel ID="pnlDropDown" runat="server" ClientIDMode="Static" CssClass="pnlDropDown"> 
      <!-- TASK NAME --> 
      <asp:DropDownList ID="ddlTaskName" CssClass="chosen-select" DataSourceID="dsPopulateTaskName" AutoPostBack="true" DataValueField="Task Name" runat="server" Width="100%" Font-Size="11px" AppendDataBoundItems="true" OnSelectedIndexChanged="ddlTaskName_onSelectIndexChanged"> 
       <asp:ListItem Text="All" Value="%"></asp:ListItem> 
      </asp:DropDownList> 

     </asp:Panel> 
     <asp:GridView ShowHeaderWhenEmpty="false" AlternatingRowStyle-BackColor="#EBE9E9" AutoGenerateColumns="false" OnSorting="yourTasksGV_Sorting" AllowSorting="true" ID="yourTasksGV" runat="server" ClientIDMode="Static" EmptyDataText="You currently have no tasks assigned to you" OnRowDataBound="yourTasksGV_RowDataBound" OnRowCreated="yourTasksGV_RowCreated"> 
      <Columns> 
       <asp:TemplateField HeaderStyle-Width="2%"> 
        <ItemTemplate> 
         <asp:ImageButton ImageUrl="~/cies.png" runat="server" ID="btnShowDepend" OnCommand="btnShowDepend_Command" CommandName="TaskDepend" CommandArgument='<%#Eval("TestIt") %>' ToolTip="Click to view Dependencies" /> 
        </ItemTemplate> 
       </asp:TemplateField> 
       <asp:HyperLinkField HeaderStyle-Width="16%" Target="_self" DataNavigateUrlFields="Task Detail" DataTextField="Task Name" DataNavigateUrlFormatString="" HeaderText="Task Detail" SortExpression="Task Name" ItemStyle-CssClass="taskTableColumn" /> 
       <asp:BoundField HeaderStyle-Width="10%" DataField="Workgroup" HeaderText="Workgroup" SortExpression="Workgroup" ItemStyle-CssClass="taskTableColumn" /> 
       <asp:BoundField HeaderStyle-Width="7%" DataField="Status" HeaderText="Status" SortExpression="Status" ItemStyle-CssClass="taskTableColumn" /> 
      </Columns> 
     </asp:GridView> 
    </ContentTemplate> 
    <%--<Triggers> 
     <asp:AsyncPostBackTrigger ControlID="ddlTaskName" EventName="onSelectIndexChanged" /> 
    </Triggers>--%> 
</asp:UpdatePanel> 

Всякий раз, когда функция ddlTaskName_onSelectIndexChanged выполняется есть полная постбэк, а не просто обновление функции UpdatePanelКак предотвратить полную постбэк на selectedindexchange для DropDownList

ddlTaskName_onSelectIndexChanged:

protected void ddlTaskName_onSelectIndexChanged(object sender, EventArgs e) 
{ 
    PullData(ViewState["sortExp"].ToString(), ViewState["sortOrder"].ToString(), false); //calls a function to update the GridView 
} 

С выше кода, страница делает полную обратную передачу, а не просто частичную (только обновление GridView), когда индекс изменяется в ddlTaskName

Какой код я могу добавить/изменить, чтобы гарантировать, что полная обратная передача не будет выполнена, и только обновить параметр GridView по индексу.

Мысль ... Нужно ли добавлять их в две отдельные версии UpdatePanel?

Если я раскомментировать triggers, я получаю следующее сообщение об ошибке: A control with ID 'ddlTaskName' could not be found for the trigger in UpdatePanel 'TasksUpdatePanel'.

Я прилагаю DropDownList к Gridview так:

Является ли это из-за этого:

protected void yourTasksGV_RowCreated(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.Header) 
    { 
     GridView hGrid = (GridView)sender; 
     GridViewRow gvrRow = new GridViewRow(0, 0, DataControlRowType.Header, DataControlRowState.Insert); 

     TableHeaderCell tcCellTask = new TableHeaderCell(); 
     tcCellTask.Controls.Add(ddlTaskName); 
     gvrRow.Cells.Add(tcCellTask); 

     yourTasksGV.Controls[0].Controls.AddAt(0, gvrRow); 
    } 
} 
+0

Вы пробовали обернуть свой Gridview в другой UpdatePanel и перенести свой текущий триггер на это? См. Здесь: http://www.asp.net/web-forms/overview/older-versions-getting-started/aspnet-ajax/understanding-asp-net-ajax-updatepanel-triggers – sr28

+0

Вы имеете в виду, что у вас есть две отдельные UpdatePanel ? Один для раскрывающегося списка и один для GridView? Но не должно быть одинаковым, если они в одном. Я просто удивлен и озадачен тем, почему он не может найти идентификатор, когда он существует. – SearchForKnowledge

+0

Да, 2 панели обновления. 1 вокруг выпадающего списка и 1 раунд Gridview. Затем поместите триггер в панель обновления Gridview, относящуюся к выпадающему меню. – sr28

ответ

2

ваш код похоже прекрасный. вы пытались прокомментировать asp: вкладка «Панель»? если вы unccoment триггерами, вам нужно поставить Asp: UpdatePanel вокруг GridView

+0

Я должен, скорее всего, выделить DDL и GridView в двух отдельных UpdatePanel? Я сделал то, что вы уже сказали, но он все еще говорит, что 'ddlTaskName' не может быть найден:/Weird ... Я думал, что мой код тоже выглядит хорошо ... Это потому, что я использую библиотеку' selected' jquery? – SearchForKnowledge

+0

nevermind, я удалил cssclass, но все тот же:/ – SearchForKnowledge

+0

удалить asp: panel –

1

Согласно этому post это выглядит как ваш осины: Панель может быть виновником с ClientIDMode = «Static». Попробуйте изменить это, чтобы он наследовал.

+0

Нет. Я удалил его, и он все тот же. Я думаю, что это связано с тем, что я перемешаюсь по выпадающему списку в моей функции «RowCreated». – SearchForKnowledge

0

Вам необходимо указать ChildrenAsTriggers="true" в вашем теге UpdatePanel. Ошибка, которую вы получаете, заключается в том, что выпадающее меню физически не существует в разметке, и это то, что ожидает строка триггера во время усложнения/времени выполнения, вместо этого вы динамически добавляете ее в качестве элемента управления в своей функции RowCreated. Возможно, в этой же функции можно будет добавить триггер для UpdatePanel динамически, если вы хотите попробовать это.

Смежные вопросы