2013-02-15 3 views
1

У меня довольно прямолинейный Gridview, который тянет в набор узлов Umbraco. Я привязываю его к загрузке страницы.Проблемы с освещением Gridview с узлами Umbraco

Моя проблема возникает на RowCommand для удаления программы (узла). Код для удаления выполняется отлично. Программа (узел) удаляется из Umbraco. Тем не менее, независимо от того, что я пытаюсь, я не могу заставить GridView правильно обновляться. Удаленная запись по-прежнему доступна. Только жесткое обновление браузера очищает его.

После обработки обработка данных не была разрезана. Не было перенаправлено обратно на страницу. Я пробовал PermanentRedirect, который работает иногда, но не все.

<asp:GridView ID="gvPrograms" runat="server" CssClass="styledTable" 
     AllowPaging="true" 
     PageSize="5" 
     AutoGenerateColumns="false" 
     OnPageIndexChanging="gvPrograms_PageIndexChanging" 
     onrowcommand="gvPrograms_RowCommand" 
     onrowdatabound="gvPrograms_RowDataBound"> 

     <rowstyle backcolor="White" 
     forecolor="#006296" 
     font-italic="false"/> 

     <alternatingrowstyle backcolor="#dbeef9" 
     forecolor="#006296" 
     font-italic="false"/> 

     <Columns> 
      <asp:BoundField DataField="Name" HeaderText="Program Name" /> 
      <asp:TemplateField HeaderText="Date"> 
       <ItemTemplate> 
        <asp:Label ID="lblProgramDate" runat="server"></asp:Label> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField> 
       <ItemTemplate> 
        <asp:LinkButton ID="lnkEdit" runat="server" Text="Edit"></asp:LinkButton> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField> 
       <ItemTemplate> 
        <asp:LinkButton ID="lnkRemove" runat="server" Text="Remove"></asp:LinkButton> 
       </ItemTemplate> 
      </asp:TemplateField> 
     </Columns> 
    </asp:GridView> 

protected void gvPrograms_RowCommand(object sender, GridViewCommandEventArgs e) 
{ 
    if (e.CommandName == "Edit Program") 
    { 
     PopulateProgram(e.CommandArgument.ToString()); 
     displayPanels(pnlAddProgram); 
     hdrEdit.InnerText = "Edit Program"; 
    } 
    else if (e.CommandName == "Remove Program") 
    { 
     int id = Int32.Parse(e.CommandArgument.ToString()); 

     //remove node from umbraco 
     Document d = new Document(id); 
     //umbraco.library.UnPublishSingleNode(id); 
     d.delete(); 
     umbraco.library.UpdateDocumentCache(d.Id); 
     umbraco.content.Instance.RefreshContentFromDatabaseAsync(); 
     umbraco.library.RefreshContent(); 

     lblMsg.Text = "The program has been successfully removed!"; 
     lblMsg.Visible = true; 

     Response.RedirectPermanent("/chapter-tools/chapter-management-center/chapter-content-admin/programs-list.aspx"); 
     //BindData(programsNodeID); 
    } 
} 

private void BindData(string programsNodeID) 
{ 
    DataTable dt = new DataTable(); 
    Node programsNode = new Node(Convert.ToInt32(programsNodeID)); 
    dt = programsNode.ChildrenAsTable(); 

    gvPrograms.DataSource = dt; 
    gvPrograms.DataBind(); 

    if (gvPrograms.Rows.Count > 0) 
     lblNone.Visible = false; 
    else 
     lblNone.Visible = true; 
} 
+0

Я не уверен, но я думаю, что у меня была такая же проблема при выполнении импорта, проверяя существующие элементы на основе nodeFactory. Я думал, что заметил небольшую задержку (1 или 2 секунды) после добавления/удаления элемента и обновления umbraco.config. Возможно, это то, что вы испытываете ... –

+0

Возможно. Но я должен разобраться в работе, так как это создает довольно ужасный пользовательский интерфейс. – JGrimm

+0

@JGrimm: Как выглядит ваш код привязки данных? –

ответ

0

Вы можете попробовать первый узел Отмена публикации перед удалением, как предложено Munkimagik’s technical Blog.

Document d = new Document(id); 

if(d.Published) 
{ 
    d.UnPublish(); 
    umbraco.library.UnPublishSingleNode(d.Id); 
} 

d.delete(); 
umbraco.library.UpdateDocumentCache(d.Id); 
+0

Пробовал это из ворот. К сожалению, не излечивает мою проблему. – JGrimm

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