1

Umbraco ノードのセットを取り込む、かなり単純な Gridview があります。ページの読み込み時にバインドしています。

私の問題は、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;
}
4

1 に答える 1

0

Munkimagikの技術ブログで提案されているように、ノードを削除する前に、まずノードの非公開を試すことができます。

Document d = new Document(id);

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

d.delete();
umbraco.library.UpdateDocumentCache(d.Id);
于 2013-02-19T18:03:05.303 に答える