MicroModel使用Gidview显示数据

本文介绍了一个使用XAML构建的MetricNode页面,包括导航、控件资源、交互触发器、数据绑定、命令操作等核心组件的设计与实现细节。详细展示了如何通过XAML实现页面布局、数据展示、事件响应等功能。

 效果图:


代码:

页面:

<navigation:Page x:Class="mircomodels3.MetricNode.MetricNode" 
           xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
           xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
           xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
           xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
           mc:Ignorable="d"
                 xmlns:vm="clr-namespace:mircomodels3.MetricNode"
           xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
                 xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation"
                 xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
                 xmlns:Prism="clr-namespace:Microsoft.Practices.Composite.Presentation.Commands;assembly=Microsoft.Practices.Composite.Presentation"
                 xmlns:Command="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Extras.SL4"
                 xmlns:ViewModel="clr-namespace:mircomodels3.ViewModel"
                 xmlns:MetricNode="clr-namespace:mircomodels3.MetricNode" xmlns:invoke="clr-namespace:mircomodels3"
                 xmlns:NodeModel="clr-namespace:mircomodels3.MetricNode.appClass" Title="MetricNode Page">
    <!--<telerik:RadWindow.Resources>
        <Datablocks:BinaryToImageConverter x:Key="binaryToImageConverter" />
        <Popup:TypeToNameConverter x:Key="typeToNameConverter" />
    </telerik:RadWindow.Resources>-->

    <!--<UserControl.Resources>
        < Command:EventToCommand Prism:Click.Command="{Binding Path=Save}"  x:Key="Import" />
    </UserControl.Resources>-->

    <UserControl.Resources>
        <NodeModel:DataContextProxy x:Key="dataContextProxy" DataContext="{Binding Object}"/>
    </UserControl.Resources>
    <Grid x:Name="LayoutRoot" DataContext="{Binding Object}">
        <i:Interaction.Triggers>
            <i:EventTrigger EventName ="Loaded">
                <i:InvokeCommandAction Command="{Binding Path=LoadAll}"></i:InvokeCommandAction>
            </i:EventTrigger>
        </i:Interaction.Triggers>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>
        <telerik:RadComboBox Name="rcbType" Width="200" HorizontalAlignment="Left">
            <telerik:RadComboBoxItem Content="MetricName"/>
            <telerik:RadComboBoxItem Content="ParameterType"/>
            <i:Interaction.Triggers>
                <i:EventTrigger EventName ="SelectionChanged">
                    <i:InvokeCommandAction Command="{Binding Path=RcbTypeSelectionChanged}" CommandParameter="{Binding ElementName=rcbType}"></i:InvokeCommandAction>
                </i:EventTrigger>
            </i:Interaction.Triggers>
        </telerik:RadComboBox>
        <telerik:RadGridView Name="radGridView1" Grid.Row="1"  AutoGenerateColumns="False"  CanUserFreezeColumns="False" ShowGroupPanel="False" SelectionMode="Single">
            <i:Interaction.Triggers>
                <i:EventTrigger EventName ="BeginningEdit">
                    <i:InvokeCommandAction Command="{Binding Path=RadGridViewBeginningEdit}" CommandParameter="{Binding ElementName=radGridView1}"></i:InvokeCommandAction>
                </i:EventTrigger>
                <i:EventTrigger EventName ="SelectionChanged">
                    <i:InvokeCommandAction Command="{Binding Path=RadGridViewSelectionChanged}" CommandParameter="{Binding ElementName=radGridView1}"></i:InvokeCommandAction>
                </i:EventTrigger>
            </i:Interaction.Triggers>
            <telerik:RadGridView.Columns>
                <telerik:GridViewDataColumn Header="UserName" Width="*"  DataMemberBinding="{Binding Path=UserName}" IsReadOnly="True"/>
                <telerik:GridViewDataColumn Header="RegExpName" Width="*"  DataMemberBinding="{Binding Path=Regex}"/>
                <telerik:GridViewDataColumn Header="Type" Width="*">
                    <telerik:GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding Type}" />
                        </DataTemplate>
                    </telerik:GridViewColumn.CellTemplate>
                    <telerik:GridViewColumn.CellEditTemplate>
                        <DataTemplate>
                            <telerik:RadComboBox Name="rcbType" SelectedIndex="{Binding Type}">
                                <telerik:RadComboBoxItem Content="MetricName"/>
                                <telerik:RadComboBoxItem Content="Custom"/>
                            </telerik:RadComboBox>
                        </DataTemplate>
                    </telerik:GridViewColumn.CellEditTemplate>
                </telerik:GridViewDataColumn>
                <telerik:GridViewDataColumn Header="Icon">
                    <telerik:GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <Image Source="{Binding Icon}" Width="20" Height="20" Stretch="Uniform" Margin="0"/>
                        </DataTemplate>
                    </telerik:GridViewColumn.CellTemplate>
                    <telerik:GridViewColumn.CellEditTemplate>
                        <DataTemplate>
                            <telerik:RadButton Name="btnUpload" Command = "{Binding  Path=BtnUploadClick}" DataContext="{Binding Source={StaticResource dataContextProxy}, Path=DataContext}"  CommandParameter="{Binding RelativeSource={RelativeSource Self}}" >
                                    <Image Source="{Binding Icon}" Width="20" Height="20" Stretch="Uniform" Margin="0"/>
                            </telerik:RadButton>
                        </DataTemplate>
                    </telerik:GridViewColumn.CellEditTemplate>
                </telerik:GridViewDataColumn>
                <telerik:GridViewColumn Header="aaa">
                    <telerik:GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <telerik:RadButton Content="Delete"  Command = "{Binding  Path=Save}" DataContext="{Binding Source={StaticResource dataContextProxy}, Path=DataContext}"  CommandParameter="{Binding RelativeSource={RelativeSource Self}}">
                            </telerik:RadButton>
                        </DataTemplate>
                    </telerik:GridViewColumn.CellTemplate>
                </telerik:GridViewColumn>

                <telerik:GridViewDataColumn  IsReadOnly="True">
                    <telerik:GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <StackPanel Orientation="Horizontal">
                                <HyperlinkButton Name="hlEdit" Content="Edit" Command = "{Binding  Path=HlEditClick}" DataContext="{Binding Source={StaticResource dataContextProxy}, Path=DataContext}"  CommandParameter="{Binding RelativeSource={RelativeSource Self}}">
                                </HyperlinkButton>
                                <HyperlinkButton Name="hlCommit" Content="Commit" Visibility="Collapsed" Command = "{Binding  Path=HlCommitClick}" DataContext="{Binding Source={StaticResource dataContextProxy}, Path=DataContext}"  CommandParameter="{Binding RelativeSource={RelativeSource Self}}"/>
                                <HyperlinkButton Name="hlCancel" Content="Cancel" Visibility="Collapsed" Command = "{Binding  Path=HlCancelClick}" DataContext="{Binding Source={StaticResource dataContextProxy}, Path=DataContext}"  CommandParameter="{Binding RelativeSource={RelativeSource Self}}"/>
                            </StackPanel>
                        </DataTemplate>
                    </telerik:GridViewColumn.CellTemplate>
                </telerik:GridViewDataColumn>
                <telerik:GridViewColumn>
                    <telerik:GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <HyperlinkButton Name="hlDelete" Content="Delete" Command = "{Binding  Path=HlDeleteClick}" DataContext="{Binding Source={StaticResource dataContextProxy}, Path=DataContext}"  CommandParameter="{Binding RelativeSource={RelativeSource Self}}" />
                        </DataTemplate>
                    </telerik:GridViewColumn.CellTemplate>
                </telerik:GridViewColumn>
            </telerik:RadGridView.Columns>
        </telerik:RadGridView>
        <telerik:RadDataPager x:Name="radDataPager" Grid.Row="2" PageSize="10" Margin="0,1,0,0" >
            <i:Interaction.Triggers>
                <i:EventTrigger EventName ="PageIndexChanged">
                    <i:InvokeCommandAction Command="{Binding Path=PageIndexChanged}" CommandParameter="{Binding ElementName=radDataPager}"></i:InvokeCommandAction>
                </i:EventTrigger>
            </i:Interaction.Triggers>
        </telerik:RadDataPager>
        <!--<StackPanel  Orientation="Vertical">-->
        <telerik:RadButton Name="btnInsert" Grid.Row="3" Content="Add new item" HorizontalAlignment="Left">
                <i:Interaction.Triggers>
                    <i:EventTrigger EventName ="Click">
                        <i:InvokeCommandAction Command="{Binding Path=BtnInsertClick}" CommandParameter="{Binding ElementName=radGridView1}"></i:InvokeCommandAction>
                    </i:EventTrigger>
                </i:Interaction.Triggers>
            </telerik:RadButton>
    </Grid>
</navigation:Page>

.cs文件

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Windows;
using System.Windows.Browser;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Windows.Navigation;
using System.Xml.Linq;
using Telerik.Windows.Controls;
using eMite.Silverlight.Data.wsEmite;
using mircomodels3.MetricNode.Mode;


namespace mircomodels3.MetricNode
{
    public partial class MetricNode : Page
    {
        public MetricNode(EmiteWebServiceClient wsEmiteClient)
        {
            InitializeComponent();
            this.DataContext = MetricNode.CreateModel(radDataPager, radGridView1, wsEmiteClient,rcbType);
        }


        public static MetricNodeViewModel CreateModel(Telerik.Windows.Controls.RadDataPager radDataPager, Telerik.Windows.Controls.RadGridView radGridView, EmiteWebServiceClient wsEmiteClient, Telerik.Windows.Controls.RadComboBox radComboBox)
        {
            MetricNodeService metricService=new MetricNodeService();
            return new MetricNodeViewModel(metricService, radDataPager,radGridView,wsEmiteClient,radComboBox);
        }

    

    }
}

viewmodel

using System;
using System.Net;
using System.Threading;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using MicroModels;
using mircomodels3.MetricNode.Mode;

namespace mircomodels3.MetricNode
{
    public class MetricNodeViewModel:MicroModel
    {

        public MetricNodeViewModel(MetricNodeService mns, Telerik.Windows.Controls.RadDataPager radDataPager, Telerik.Windows.Controls.RadGridView radGridView, EmiteWebServiceClient wsEmiteClient,Telerik.Windows.Controls.RadComboBox radComboBox)
        {

            Command("RcbTypeSelectionChanged", (object sender) => mns.RcbTypeSelectionChanged(sender));

            Command("RadGridViewBeginningEdit", (object sender) => mns.RadGridViewBeginningEdit(sender));

            Command("RadGridViewSelectionChanged", (object sender) => mns.RadGridViewSelectionChanged(sender));

            Command("BtnUploadClick", (object sender) => mns.BtnUploadClick(sender));

            Command("PageIndexChanged", (object sender) => mns.PageIndexChanged(sender));

            Command("BtnInsertClick", (object sender) => mns.BtnInsertClick(sender));

            Command("LoadAll", () => mns.GetAllMetricNodeIcon(radDataPager, radGridView, wsEmiteClient,radComboBox));

            Command("Save", () => MessageBox.Show("dsdsa"));

            Command("HlEditClick",(object sender)=>mns.HlEditClick(sender));

            Command("HlCommitClick", (object sender) =>mns.HlCommitClick(sender));

            Command("HlCancelClick", (object sender) =>mns.HlCancelClick(sender));

            Command("HlDeleteClick", (object sender) => mns.HlDeleteClick(sender));

            Command("ExportToCSV", () => mns.ExportToCSV());

            Command("CSVImport", () => mns.CSVImport());
        }
    }
}

Service

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.IO;
using System.Linq;
using System.Net;
using System.ServiceModel;
using System.Text;
using System.Threading;
using System.Windows;
using System.Windows.Browser;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Telerik.Windows.Controls;
using Telerik.Windows.Controls.GridView;
using eMite.Silverlight.Data;
using eMite.Silverlight.Data.wsEmite;
using mircomodels3.MetricNode.Mode;
using mircomodels3.MetricNode.appClass;
using SelectionChangedEventArgs = Telerik.Windows.Controls.SelectionChangedEventArgs;

namespace mircomodels3.MetricNode
{
    public class MetricNodeService
    {
        private EmiteWebServiceClient _wsEmiteClient;
        private Telerik.Windows.Controls.RadGridView _radGridView;
        private Telerik.Windows.Controls.RadDataPager _radDataPager;
        private Telerik.Windows.Controls.RadComboBox _rcbType;


        readonly DataProvider _provider = new DataProvider(new EmiteWcfFactory());
        private bool _isInsert;
        private GridViewCellBase _pastCell;
        private GridViewRowItem _pastRow;
        private object _item;
        private byte[] _imageBytes;
        private ClientMetricNodeIcon _removeItem;
        private ObservableCollection<MetricNodeIconDto> _mnIcons;
        private bool _isUpload = false;
        public ObservableCollection<ClientMetricNode> _NodeData;
        public object _DataContext;
        public MetricNode metricNode;
        
 
        public void GetAllMetricNodeIcon(Telerik.Windows.Controls.RadDataPager radDataPager,Telerik.Windows.Controls.RadGridView radGridView,EmiteWebServiceClient wsEmiteClient,Telerik.Windows.Controls.RadComboBox radComboBox)
        {
            _wsEmiteClient = wsEmiteClient;
            //_metricNode = metricNode;
            _radGridView = radGridView;
            _radDataPager = radDataPager;
            _rcbType = radComboBox;

            var mniRequest = new MetricNodeIconRequest()
            {
                Start = 1,
                End = radDataPager.PageSize,
            };
            TempToken.CreateScopeAndSecurityToken(wsEmiteClient.InnerChannel);
            _wsEmiteClient.GetMetricNodeIconsCompleted -= _wsEmiteClient_GetMetricNodeIconsCompleted;
            _wsEmiteClient.GetMetricNodeIconsCompleted += _wsEmiteClient_GetMetricNodeIconsCompleted;
            _wsEmiteClient.GetMetricNodeIconsAsync(mniRequest);
        }


        private void _wsEmiteClient_GetMetricNodeIconsCompleted(object sender, GetMetricNodeIconsCompletedEventArgs e)
        {
            if (e.Error == null)
            {
                if (e.Result != null && e.Result.Count > 0)
                {
                    var reponse = e.Result;
                    _radDataPager.ItemCount = reponse.Count;
                    //_radGridView.ItemsSource = reponse.MetricNodeIcons.ToList();

                    var cmnis = reponse.MetricNodeIcons.Select(mni => new ClientMetricNodeIcon()
                    {
                        IconId = mni.IconId,
                        Icon = mni.Icon,
                        Regex = mni.Regex,
                        Type = mni.Type,
                        UserName = mni.UserName
                    }).ToList();
                    _radGridView.ItemsSource = cmnis;
                    _radGridView.Columns[4].IsVisible = false;
                }
            }
        }




        
        
        public void RcbTypeSelectionChanged(object sender)
        {
            Telerik.Windows.Controls.RadComboBox rcbType = sender as Telerik.Windows.Controls.RadComboBox;
            _rcbType = rcbType;
            if (_mnIcons == null || _mnIcons.Count == 0)
            {
                var mniRequest = new MetricNodeIconRequest
                {
                   
                    Op = rcbType.SelectedIndex + 1,
                    Start = 1,
                    End = _radDataPager.PageSize,
                };
                GetMetricNodeIcons(mniRequest);
            }
            else
            {
                var cmnis = new ObservableCollection<ClientMetricNodeIcon>();
                foreach (MetricNodeIconDto mni in _mnIcons.Where(n => n.Type == rcbType.SelectedIndex + 1).Take(_radDataPager.PageSize))
                {
                    cmnis.Add(new ClientMetricNodeIcon
                    {
                        IconId = mni.IconId,
                        Icon = mni.Icon,
                        Regex = mni.Regex,
                        Type = mni.Type,
                        UserName = mni.UserName
                    });
                }
                _radDataPager.ItemCount = _mnIcons.Count(n => n.Type == 1);
                _radDataPager.PageIndex = 0;
                _radGridView.ItemsSource = cmnis;
            }
        }

        private void GetMetricNodeIcons(MetricNodeIconRequest mniRequest)
        {
            _wsEmiteClient=new EmiteWebServiceClient();
            TempToken.CreateScopeAndSecurityToken(_wsEmiteClient.InnerChannel);
            _wsEmiteClient.GetMetricNodeIconsCompleted -= _wsEmiteClient_GetMetricNodeIconsCompleted;
            _wsEmiteClient.GetMetricNodeIconsCompleted += _wsEmiteClient_GetMetricNodeIconsCompleted;
            _wsEmiteClient.GetMetricNodeIconsAsync(mniRequest);
        }


        public void RadGridViewBeginningEdit(object sender)
        {
            Telerik.Windows.Controls.RadGridView radGridView = sender as Telerik.Windows.Controls.RadGridView;
            if (_pastRow == null || _pastRow != ((GridViewDataControl)(sender)).CurrentCell.ParentRow)
            {
                _pastRow = ((GridViewDataControl)(sender)).CurrentCell.ParentRow;
                GridViewCellBase cell = _pastRow.Cells[2];
                IList<HyperlinkButton> list = cell.ChildrenOfType<HyperlinkButton>();
                foreach (HyperlinkButton hlbtn in list)
                {
                    hlbtn.Visibility = hlbtn.Content.ToString() == "Edit" ? Visibility.Collapsed : Visibility.Visible;
                }
            }

            if (_pastRow != null && _pastRow == ((GridViewDataControl)(sender)).CurrentCell.ParentRow)
            {
                //pastRow = ((GridViewDataControl)(sender)).CurrentCell.ParentRow;
                GridViewCellBase cell = _pastRow.Cells[2];
                IList<HyperlinkButton> list = cell.ChildrenOfType<HyperlinkButton>();
                foreach (HyperlinkButton hlbtn in list)
                {
                    hlbtn.Visibility = hlbtn.Content.ToString() == "Edit" ? Visibility.Collapsed : Visibility.Visible;
                }
            }
        }



        public void RadGridViewSelectionChanged(object sender)
        {
            Telerik.Windows.Controls.RadGridView radGridView1 = sender as Telerik.Windows.Controls.RadGridView;
            var row = radGridView1.ItemContainerGenerator.ContainerFromItem(radGridView1.SelectedItem) as GridViewRow;
            if (row == null) return;
            if (_pastCell == null)
            {
                _pastCell = row.Cells[2];
                return;
            }

            IList<HyperlinkButton> list = _pastCell.ChildrenOfType<HyperlinkButton>();
            foreach (HyperlinkButton hlbtn in list)
            {
                hlbtn.Visibility = hlbtn.Content.ToString() == "Edit" ? Visibility.Visible : Visibility.Collapsed;
            }

            if (!_isInsert)
                radGridView1.CancelEdit();
            else
            {
                _isInsert = false;
            }

            _pastCell = row.Cells[2];
        }


        public void BtnUploadClick(object sender)
        {
            //Telerik.Windows.Controls.RadGridView radGridView1 = sender as Telerik.Windows.Controls.RadGridView;
            _isUpload = true;
            _item =(((FrameworkElement) (((FrameworkElement) (((FrameworkElement) (sender)).Parent)).Parent)).DataContext);
            //_item = radGridView1.SelectedItem;
            //var item =((Telerik.Windows.Controls.RadRowItem)
            //     (((Telerik.Windows.Controls.GridView.GridViewCellBase)
            //       ((((Button) (sender)).Parent))).ParentRow)).Item;
            var dlg = new OpenFileDialog
            {
                Filter = "Image Files(*.gif;*.jpg;*.jpeg;*.png)|*.gif;*.jpg;*.jpeg;*.png",
                Multiselect = false
            };
            dlg.ShowDialog();

            if (dlg.File == null) return;
            Stream inputStream = dlg.File.OpenRead();
            //tempStream = inputStream;
            long length = inputStream.Length;
            _imageBytes = new byte[length];
            var reader = new BinaryReader(inputStream);
            _imageBytes = reader.ReadBytes(Convert.ToInt32(length));
            if (_item != null)
            {
                var clientMetricNodeIcon = _item as ClientMetricNodeIcon;
                if (clientMetricNodeIcon != null && clientMetricNodeIcon.IconId != 0)
                {
                    var mni = new MetricNodeIconRequest
                    {
                        Start = 1,
                        End = _radDataPager.PageSize,
                    };
                    TempToken.CreateScopeAndSecurityToken(_wsEmiteClient.InnerChannel);
                    _wsEmiteClient.GetMetricNodeIconsCompleted -= _wsEmiteClient_GetMetricNodeIconsCompleted;
                    _wsEmiteClient.GetMetricNodeIconsCompleted += _wsEmiteClient_GetMetricNodeIconsCompleted;
                    _wsEmiteClient.GetMetricNodeIconsAsync(mni);
                }
                else if (clientMetricNodeIcon != null && clientMetricNodeIcon.IconId == 0)
                {
                    clientMetricNodeIcon.Icon = _imageBytes;
                }
            }
        }


        public void PageIndexChanged(object sender)
        {
            Telerik.Windows.Controls.RadDataPager radDataPager = sender as Telerik.Windows.Controls.RadDataPager;
            _radDataPager = radDataPager;
            if (_radGridView == null) return;
            if (_radGridView.Items != null && _radGridView.Items.Count > 0 && _mnIcons == null)
            {
                var mniRequest = new MetricNodeIconRequest
                {

                    Start = radDataPager.PageIndex * _radDataPager.PageSize + 1,
                    End = radDataPager.PageIndex * _radDataPager.PageSize + _radDataPager.PageSize,
                };
                GetMetricNodeIcons(mniRequest);
            }
            else
            {
                BindGridview();
            }

        }

        private void BindGridview()
        {
            var cmnis = new ObservableCollection<ClientMetricNodeIcon>();
            foreach (
                MetricNodeIconDto mni in
                    _mnIcons.Where(n => n.Type == _rcbType.SelectedIndex + 1).Skip(_radDataPager.PageSize * _radDataPager.PageIndex).
                        Take(_radDataPager.PageSize))
            {
                cmnis.Add(new ClientMetricNodeIcon
                {
                    IconId = mni.IconId,
                    Icon = mni.Icon,
                    Regex = mni.Regex,
                    Type = mni.Type,
                    UserName = mni.UserName
                });
            }
            _radGridView.ItemsSource = cmnis;
            _radDataPager.ItemCount = _mnIcons.Count(n => n.Type == _rcbType.SelectedIndex + 1);
        }


        public void BtnInsertClick(object sender)
        {
            Telerik.Windows.Controls.RadGridView radGridView1 = sender as Telerik.Windows.Controls.RadGridView;
            _isInsert = true;
            radGridView1.BeginInsert();
        }


        public void HlEditClick(object sender)
        {
            var children = ((Panel)(((ButtonBase)(sender)).Parent)).Children;
            foreach (UIElement child in children)
            {
                child.Visibility = ((ContentControl)child).Content.ToString() == "Edit" ? Visibility.Collapsed : Visibility.Visible;
            }
            ((GridViewCell)(((StackPanel)((((ButtonBase)(sender)).Parent))).Parent)).ParentRow.IsSelected = true;
        }

        public void HlCommitClick(object sender)
        {
            _radGridView.RowEditEnded += RadGridView1RowEditEnded;
            _radGridView.CommitEdit();
            var children = ((Panel)(((ButtonBase)(sender)).Parent)).Children;
            foreach (UIElement child in children)
            {
                child.Visibility = ((ContentControl)child).Content.ToString() == "Edit" ? Visibility.Visible : Visibility.Collapsed;
            }
        }

        private void RadGridView1RowEditEnded(object sender, GridViewRowEditEndedEventArgs e)
        {
            var newdata = e.NewData as ClientMetricNodeIcon;
            _item = newdata;
            if (newdata == null) return;
            if (e.EditOperationType == GridViewEditOperationType.Edit)
            {
                var mni = new MetricNodeIconRequest
                {
                    Op = 1,
                    MetricNodeIcon = new MetricNodeIconDto
                    {
                        IconId = newdata.IconId,
                        Icon = newdata.Icon,
                        Regex = newdata.Regex,
                        Type = newdata.Type,
                        UserName = "admin"
                        //ModelLocator.Instance.UserManager.LoggedInUser.UserName
                    }
                };
                SaveMetricNodeIcon(mni);
            }
            if (e.EditOperationType == GridViewEditOperationType.Insert)
            {
                var mni = new MetricNodeIconRequest
                {
                    Op = 0,
                    MetricNodeIcon = new MetricNodeIconDto
                    {
                        IconId = newdata.IconId,
                        Icon = newdata.Icon,
                        Regex = newdata.Regex,
                        Type = _rcbType.SelectedIndex + 1,
                        UserName = "admin"
                        //ModelLocator.Instance.UserManager.LoggedInUser.UserName
                    }
                };
                SaveMetricNodeIcon(mni);
            }
            _radGridView.RowEditEnded -= RadGridView1RowEditEnded;
        }


        private void SaveMetricNodeIcon(MetricNodeIconRequest mni)
        {
            TempToken.CreateScopeAndSecurityToken(_wsEmiteClient.InnerChannel);
            InvokerBase invoker = _provider.CreateInvoker("", App.pageBinding, App.webServiceURL);
            //AsyncCallback asyncCallback = SaveMetricNodeIconEventCallBack;
            //invoker.SaveMetricNodeIconAsync(mni, asyncCallback);
            invoker.Dispose();
        }

        public void HlCancelClick(object sender)
        {
            _radGridView.CancelEdit();
            var children = ((Panel)(((ButtonBase)(sender)).Parent)).Children;
            foreach (UIElement child in children)
            {
                child.Visibility = ((ContentControl)child).Content.ToString() == "Edit" ? Visibility.Visible : Visibility.Collapsed;
            }
        }

        public void HlDeleteClick(object sender)
        {
            var removeItem =
                ((GridViewCellBase)(((ButtonBase)(sender)).Parent)).ParentRow.Item as ClientMetricNodeIcon;
            if (removeItem == null)
            {
                _radGridView.CancelEdit();
                return;
            }
            //var removeItem = radGridView1.SelectedItem as ClientMetricNodeIcon;
            if (removeItem.IconId == 0)
            {
                try
                {
                    ((ObservableCollection<ClientMetricNodeIcon>)_radGridView.ItemsSource).Remove(removeItem);
                }
                catch (Exception)
                {
                    _radGridView.CancelEdit();
                }
            }
            else if (removeItem.IconId != 0)
            {
                _removeItem = removeItem;
                ((List<ClientMetricNodeIcon>)_radGridView.ItemsSource).Remove(removeItem);
                var mni = new MetricNodeIconRequest
                {
                    Op = 2,
                    MetricNodeIcon = new MetricNodeIconDto
                    {
                        IconId = removeItem.IconId
                    }
                };
                SaveMetricNodeIcon(mni);
            }
        }




        public void ExportToCSV()
        {
            string extension = "csv";
            SaveFileDialog dialog = new SaveFileDialog()
            {
                DefaultExt = extension,
                Filter = String.Format("{1} files (*.{0})|*.{0}|All files (*.*)|*.*", extension, "CSV"),
                FilterIndex = 1
            };
            if (dialog.ShowDialog() == true)
            {
                using (Stream stream = dialog.OpenFile())
                {
                    _radGridView.Export(stream,
                     new GridViewExportOptions()
                     {
                         Format = ExportFormat.Csv,
                         ShowColumnHeaders = true,
                         ShowColumnFooters = true,
                         ShowGroupFooters = false,
                     });
                }
            }
        }


        public void CSVImport()
        {
            OpenFileDialog dlg = new OpenFileDialog()
            {
                Filter = "Csv Files (*.csv)|*.csv|All Files (*.*)|*.*",
            };

            if (true == dlg.ShowDialog())
            {
                //myList.DataContext = dlg.Files;
                FileInfo fi = dlg.File;
                if (fi != null)
                {
                    using (Stream stream = fi.OpenRead())
                    {
                        List<ClientMetricNodeIcon> metricNodeIcons = new List<ClientMetricNodeIcon>();
                        StreamReader fileReader = new StreamReader(stream);
                        string strLine = "";
                        string[] tempString = new string[4];
                        while (strLine != null)
                        {
                            strLine = fileReader.ReadLine();
                            if (strLine != null && strLine.Length > 0)
                            {
                                //ls.Add(strLine.Split(','));
                                ClientMetricNodeIcon metricNode = new ClientMetricNodeIcon();
                                tempString = strLine.Split(',');
                                metricNode.UserName = tempString[0];
                                metricNode.Regex = tempString[1];
                                try
                                {
                                    metricNode.Type = Convert.ToInt16(tempString[2]);
                                }
                                catch (Exception err)
                                {
                                    metricNode.Type = 0;
                                }

                                try
                                {
                                    byte[] byteArry = new byte[0];

                                    byteArry = System.Text.Encoding.UTF8.GetBytes(tempString[3]);
                                    //string str = System.Text.Encoding.UTF8.GetString(byteArry);
                                    metricNode.Icon = byteArry;
                                }
                                catch (Exception err)
                                {

                                }

                                metricNodeIcons.Add(metricNode);
                            }
                        }
                        fileReader.Close();
                        _radGridView.ItemsSource = metricNodeIcons;
                        stream.Close();

                    }
                }
            }
        }


    }
}


评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值