среда, 2 ноября 2011 г.

ASPxMenu in ASPxGridview with menu items that depends on a row value


Menu items are created from server side via the ASPxMenu Init  event handler and depends on a row value.I created different item click events, on "Delete" item click appears alert window, on "Edit" item click appears popup window.

 I used DevExpress v.10.2.4.0.
Default.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="Default" %>

<%@ Register Assembly="DevExpress.Web.v10.2, Version=10.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a"
    Namespace="DevExpress.Web.ASPxPopupControl" TagPrefix="dx" %>

<%@ Register Assembly="DevExpress.Web.v10.2, Version=10.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a"
    Namespace="DevExpress.Web.ASPxMenu" TagPrefix="dx" %>

<%@ Register Assembly="DevExpress.Web.ASPxGridView.v10.2, Version=10.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a"
    Namespace="DevExpress.Web.ASPxGridView" TagPrefix="dx" %>

<%@ Register assembly="DevExpress.Web.ASPxEditors.v10.2, Version=10.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" namespace="DevExpress.Web.ASPxEditors" tagprefix="dx" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <dx:ASPxGridView ID="ASPxGridView1" runat="server"
            ClientInstanceName="ASPxGridView1" KeyFieldName="ID"
            AutoGenerateColumns="False" ClientIDMode="AutoID" DataSourceID="SqlDataSource1">
        <Columns>
            <dx:GridViewDataTextColumn FieldName="ID" VisibleIndex="0" ReadOnly="True">
                <EditFormSettings Visible="False" />
            </dx:GridViewDataTextColumn>
            <dx:GridViewDataTextColumn FieldName="Status" VisibleIndex="1">
            </dx:GridViewDataTextColumn>
            <dx:GridViewDataTextColumn FieldName="Data" VisibleIndex="2">
            </dx:GridViewDataTextColumn>
            <dx:GridViewDataColumn VisibleIndex="20" Name="Action">
                <DataItemTemplate>
                    <dx:ASPxMenu ID="ASPxMenu1" runat="server" ClientIDMode="AutoID"
                        oninit="ASPxMenu1_Init" BackColor="Transparent" >
                        <Items>
                            <dx:MenuItem Text="Menu" >
                            </dx:MenuItem>
                        </Items>
                    </dx:ASPxMenu>
                </DataItemTemplate>
            </dx:GridViewDataColumn>
        </Columns>
        </dx:ASPxGridView>

        <dx:ASPxPopupControl ID="ASPxPopupControl1" runat="server" Modal="true" PopupHorizontalAlign="WindowCenter" PopupVerticalAlign="WindowCenter">
            <ContentCollection>
                <dx:PopupControlContentControl runat="server" SupportsDisabledAttribute="True">
                    <dx:ASPxLabel ID="ASPxLabel1" runat="server" ClientIDMode="AutoID"
                        Text="Custom edit window">
                    </dx:ASPxLabel>
                </dx:PopupControlContentControl>
            </ContentCollection>
        </dx:ASPxPopupControl>

        <asp:SqlDataSource ID="SqlDataSource1" runat="server"
        ConnectionString="<%$ ConnectionStrings:testConnectionString %>"
        SelectCommand="SELECT [ID], [Status], [Data] FROM [testTable]"></asp:SqlDataSource>
    </div>
    </form>
</body>
</html>


Default.aspx.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using DevExpress.Web.ASPxMenu;
using DevExpress.Web.ASPxGridView;

public partial class Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    protected void ASPxMenu1_Init(object sender, EventArgs e)
    {
        ASPxMenu ASPxMenu1 = sender as ASPxMenu;
        GridViewDataItemTemplateContainer container = ASPxMenu1.NamingContainer as GridViewDataItemTemplateContainer;

        string Status = ASPxGridView1.GetRowValues(Convert.ToInt32(container.VisibleIndex), "Status").ToString();

        if (Status == "Sucsess")
        {
            ASPxMenu1.Items[0].Items.Add("Delete");
            ASPxMenu1.Items[0].Items[0].Name = "deleteLink";
        }
        else if (Status == "Fault")
        {
            ASPxMenu1.Items[0].Items.Add("Edit");
            ASPxMenu1.Items[0].Items[0].Name = "editLink";
            ASPxMenu1.Items[0].Items[0].NavigateUrl = "javascript:void();";
        }

        ASPxMenu1.ClientSideEvents.ItemClick = "function (s, e) { if (e.item.name == 'deleteLink') { alert('Delete action'); } else if (e.item.name == 'editLink') { ASPxPopupControl1.Show(); } }";

    }
}

Комментариев нет:

Отправить комментарий