rad grid, drag and drop

<%@ Page Title="" Language="C#" MasterPageFile="~/Masters/admin.master" AutoEventWireup="true" CodeFile="testDragDrop.aspx.cs" Inherits="Admin_policy_testDragDrop" %>

<%@ Register TagPrefix="telerik" Namespace="Telerik.Web.UI" Assembly="Telerik.Web.UI" %>

<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">


<%--<telerik:RadScriptManager runat="server" ID="RadScriptManager1" />--%>
    <telerik:RadFormDecorator ID="RadFormDecorator1" DecoratedControls="All" runat="server"
        Skin="Metro" EnableRoundedCorners="false"></telerik:RadFormDecorator>

    <telerik:RadAjaxLoadingPanel ID="RadAjaxLoadingPanel1" runat="server" Width="256px" Height="64px" MinDisplayTime="5000">
    <asp:Label ID="Label2" runat="server" ForeColor="Red">Loading... </asp:Label>
    </telerik:RadAjaxLoadingPanel>

<%--    <asp:Image ID="Image1" runat="server" Width="224px" Height="48px" ImageUrl="~/Loading.gif"></asp:Image>--%>
    


    <telerik:RadAjaxManager runat="server" ID="radAjax" DefaultLoadingPanelID="RadAjaxLoadingPanel1">
        <AjaxSettings>
            <telerik:AjaxSetting AjaxControlID="grdPolicy">
                <UpdatedControls>
                    <telerik:AjaxUpdatedControl ControlID="grdPolicy" ></telerik:AjaxUpdatedControl>
                </UpdatedControls>
            </telerik:AjaxSetting>
        </AjaxSettings>
    </telerik:RadAjaxManager>

    <telerik:RadScriptBlock runat="server" ID="scriptBlock">
        <script type="text/javascript">
        //<![CDATA[
            function onRowDropping(sender, args) {
                if (sender.get_id() == "<%=grdPolicy.ClientID %>") {
                    var node = args.get_destinationHtmlElement();
                    if (!isChildOf('<%=grdPolicy.ClientID %>', node)) {
                        args.set_cancel(true);
                    }
                }
                
            }

            function isChildOf(parentId, element) {
                while (element) {
                    if (element.id && element.id.indexOf(parentId) > -1) {
                        return true;
                    }
                    element = element.parentNode;
                }
                return false;
            }
            //]]>
        </script>
    </telerik:RadScriptBlock>
    <div class="exWrap">

        <p class="howto">
            Select and drag orders from pending to shipped when dispatched<br />
            Reorder pending orders on priority by drag and drop<br />
            Drop a shipped order over the recycle bin to delete it</p>
        <div style="float: left; padding: 0 6px 0 10px">
            <h2 style="color: #9c3608">
                Pending Orders</h2>
            <telerik:RadGrid runat="server" ID="grdPolicy" AutoGenerateColumns="false" 
                AllowPaging="True" Width="350px"  AllowMultiRowSelection="true" 
                PageSize="30" onneeddatasource="grdPolicy_NeedDataSource" 
                onrowdrop="grdPolicy_RowDrop" ondeletecommand="grdPolicy_DeleteCommand" 
                onitemcommand="grdPolicy_ItemCommand" >
                <MasterTableView DataKeyNames="PolicyId" Width="100%" TableLayout="Fixed" CssClass="table table-bordered table-primary" >
                    <Columns>
                        <telerik:GridDragDropColumn HeaderStyle-Width="18px" Visible="false">
                        </telerik:GridDragDropColumn>
                        <telerik:GridBoundColumn HeaderText="Policy Name" DataField="Name"></telerik:GridBoundColumn>

                        
                      <telerik:GridTemplateColumn>
                        <ItemTemplate>
                            <asp:HyperLink runat="server" NavigateUrl='<%# Eval("PolicyId","edit.aspx?PolicyId={0}") %>' CssClass="btn-action no-border glyphicons edit btn-table"><i></i></asp:HyperLink>                            
                        </ItemTemplate>
                      </telerik:GridTemplateColumn>

                      <telerik:GridTemplateColumn>
                        <ItemTemplate>
                            <asp:LinkButton ID="BtnDelete" runat="server" CssClass="btn-action no-border glyphicons remove_2 btn-table" CommandArgument='<%# Eval("PolicyId") %>' CommandName="Delete" OnClientClick="javascript: return confirm('Are you sure?');"><i></i></asp:LinkButton>
                        </ItemTemplate>
                      </telerik:GridTemplateColumn>

                    </Columns>
                </MasterTableView>
                <ClientSettings AllowRowsDragDrop="True" AllowColumnsReorder="true" ReorderColumnsOnClient="true">
                    <Selecting AllowRowSelect="True" EnableDragToSelectRows="false"></Selecting>
                    <ClientEvents OnRowDropping="onRowDropping"></ClientEvents>
                    <Scrolling AllowScroll="true" UseStaticHeaders="true"></Scrolling>
                </ClientSettings>
                <%--<PagerStyle Mode="NumericPages" PageButtonCount="4"></PagerStyle>--%>
            </telerik:RadGrid>
        </div>
        
        <div style="clear: both;">
        </div>
        <asp:Button ID="Button1" runat="server" Text="Button" οnclick="Button1_Click" />
    </div>


</asp:Content>


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Web.UI;
using Telerik.Web.UI;
using HRASP.Entities;
using HR.Managers.Library.Managers;

public partial class Admin_policy_testDragDrop : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        grdPolicy.MasterTableView.GetColumn("DragDropColumn").Visible = true;
    }


    protected TList<Policy> Policies
    {
        get
        {
            try
            {
                object obj = Session["Policies"];
                if (obj == null)
                {
                    obj = PolicyManager.GetAllPolicies();
                    if (obj != null)
                    {
                        Session["Policies"] = obj;
                    }
                    else
                    {
                        obj = new TList<Policy>();
                    }
                }
                return (TList<Policy>)obj;
            }
            catch (Exception ex)
            {
                Session["PendingPolicys"] = null;

            }

            return new TList<Policy>();
        }
        set { Session["Policies"] = value; }

    }

    protected void grdPolicy_NeedDataSource(object sender, GridNeedDataSourceEventArgs e)
    {
        grdPolicy.DataSource = Policies;
    }

    private void UpdateSortOrder()
    {
        TList<Policy> list = (TList<Policy>)Policies;

        PolicyManager.UpdatePoliciesSortOrder(list);

    }

    protected void grdPolicy_RowDrop(object sender, GridDragDropEventArgs e)
    {
        if (string.IsNullOrEmpty(e.HtmlElement))
        {
            // check drag from which grid 
            if (e.DraggedItems[0].OwnerGridID == grdPolicy.ClientID)
            {
                // check drop to whcih grid
                if (e.DestDataItem != null && e.DestDataItem.OwnerGridID == grdPolicy.ClientID)
                {
                    //rePolicy items in pending grid
                    TList<Policy> list = Policies;

                    var obj1 = e.DestDataItem.GetDataKeyValue("PolicyId");
                    Policy p = GetPolicy(list, (Guid)e.DestDataItem.GetDataKeyValue("PolicyId"));

                    int destinationIndex = list.IndexOf(p);

                    if (e.DropPosition == GridItemDropPosition.Above && e.DestDataItem.ItemIndex > e.DraggedItems[0].ItemIndex)
                    {
                        destinationIndex -= 1;
                    }

                    if (e.DropPosition == GridItemDropPosition.Below && e.DestDataItem.ItemIndex < e.DraggedItems[0].ItemIndex)
                    {
                        destinationIndex += 1;
                    }

                    TList<Policy> PolicysToMove = new TList<Policy>();
                    foreach (GridDataItem draggedItem in e.DraggedItems)
                    {
                        Policy tmpPolicy = GetPolicy(list, (Guid)draggedItem.GetDataKeyValue("PolicyId"));
                        if (tmpPolicy != null)
                            PolicysToMove.Add(tmpPolicy);
                    }

                    foreach (Policy PolicyToMove in PolicysToMove)
                    {
                        list.Remove(PolicyToMove);
                        list.Insert(destinationIndex, PolicyToMove);
                    }

                    Policies = list;
                    grdPolicy.Rebind();

                    //int destinationItemIndex = destinationIndex - (grdPendingPolicys.PageSize * grdPendingPolicys.CurrentPageIndex);
                    //e.DestinationTableView.Items[destinationItemIndex].Selected = true;

                }

            }
        }


    }

    private static Policy GetPolicy(IEnumerable<Policy> PolicysToSearchIn, Guid policyId)
    {
        foreach (Policy Policy in PolicysToSearchIn)
        {
            if (Policy.PolicyId == policyId)
            {
                return Policy;
            }
        }
        return null;
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        UpdateSortOrder();
    }

    protected void grdPolicy_DeleteCommand(object sender, GridCommandEventArgs e)
    {

    }


    protected void grdPolicy_ItemCommand(object sender, GridCommandEventArgs e)
    {
        //if (e.CommandName == "Delete")
        //{
        //    string s = e.CommandArgument.ToString();
        //}


        try
        {
            Guid uid = new Guid();

            if (Guid.TryParse(e.CommandArgument.ToString(), out uid))
            {
                if (uid != Guid.Empty)
                {
                    if (e.CommandName == "Delete")
                    {
                        PolicyManager.DeletePolicy(uid);

                        Policies = null;   // get latest data from  db
                    }

                }
            }
        }
        catch (Exception ex)
        {

        }
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值