silverlight中的datagrid多项数据操作

本来想做成左右箭头操作左右两张datagrid数据表的,后来根据实际需求,要结合数据库查询和存储数据,遂做成以下效果:

具体代码如下:

首先,新建XAML页面如下:

<sdk:DataGridTemplateColumn xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk"
                            x:Class="NEPTUNE.DevConfigure.DataGridSelectColumn"
                            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" 
                            d:DesignHeight="300"
                            d:DesignWidth="400">
    <sdk:DataGridTemplateColumn.HeaderStyle>
        <Style TargetType="ContentControl">
            <Setter Property="ContentTemplate">
                <Setter.Value>
                    <DataTemplate>
                        <CheckBox  Content="选 择"
                                   VerticalContentAlignment="Center"
                                   VerticalAlignment="Center"
                                   Loaded="OnHeaderCheckBoxLoaded"/>
                    </DataTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </sdk:DataGridTemplateColumn.HeaderStyle>
    <sdk:DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <CheckBox IsChecked="{Binding IsSelected,Mode=TwoWay}"
                      VerticalAlignment="Center"
                      HorizontalAlignment="Center" />
        </DataTemplate>
    </sdk:DataGridTemplateColumn.CellTemplate>
</sdk:DataGridTemplateColumn>

然后添加两个类文件:DataGridExtensions.cs和DataGridRBExtensions.cs



    public partial class DataGridSelectColumn : DataGridTemplateColumn
    {

        private DataGrid _ownerDataGrid;
        private CheckBox _headerCheckBox;
        private Dictionary<object, MarkObject> _markObjects;

        public event EventHandler SelectedItemChanged;

        public DataGridSelectColumn()
        {
            InitializeComponent();
            IsReadOnly = true;
            _markObjects = new Dictionary<object, MarkObject>();
        }

        public DataGrid OwnerDataGrid
        {
            get { return _ownerDataGrid; }
            set
            {
                _ownerDataGrid = value;
                _ownerDataGrid.LoadingRow += OnLoadingRow;
            }
        }

        public void SelecteAll()
        {
            if (_headerCheckBox != null)
                _headerCheckBox.IsChecked = true;
            SetAllSelectedStates(true);
        }

        public void UnselectAll()
        {
            if (_headerCheckBox != null)
                _headerCheckBox.IsChecked = false;
            SetAllSelectedStates(false);
        }

        public List<T> GetSelectedItems<T>()
        {
            List<T> result = new List<T>();
            if (_ownerDataGrid.ItemsSource != null)
            {
                var enu = _ownerDataGrid.ItemsSource.GetEnumerator();
                while (enu.MoveNext())
                {
                    if (GetMarkObject(enu.Current).IsSelected)
                        result.Add((T)enu.Current);
                }
            }
            ClearItems();
            return result;
        }

        public List<T> GetUnSelectedItems<T>()
        {
            List<T> result = new List<T>();
            if (_ownerDataGrid.ItemsSource != null)
            {
                var enu = _ownerDataGrid.ItemsSource.GetEnumerator();
                while (enu.MoveNext())
                {
                    if (!(GetMarkObject(enu.Current).IsSelected))
                        result.Add((T)enu.Current);
                }
            }
            ClearItems();
            return result;
        }

        public void SetSelectedItems(IList items)
        {
            if (_ownerDataGrid.ItemsSource == null)
                return;

            var enu = _ownerDataGrid.ItemsSource.GetEnumerator();
            while (enu.MoveNext())
            {
                GetMarkObject(enu.Current).IsSelected = items.Contains(enu.Current);
            }
        }

        public void ClearItems()
        {
            var enu = _ownerDataGrid.ItemsSource.GetEnumerator();
            List<object> list = new List<object>();
            while (enu.MoveNext())
            {
                list.Add(enu.Current);
            }
            List<object> removableObjects = new List<object>();
            foreach (var item in _markObjects)
            {
                if (list.Contains(item.Key) == false)
                {
                    removableObjects.Add(item.Key);
                }
            }
            for (int i = 0; i < removableObjects.Count; i++)
            {
                _markObjects.Remove(removableObjects[i]);
            }
        }

        private void OnHeaderCheckBoxLoaded(object sender, RoutedEventArgs e)
        {
            _headerCheckBox = sender as CheckBox;
            _headerCheckBox.Loaded -= OnHeaderCheckBoxLoaded;
            //_headerCheckBox.Checked += (s2, e2) => SetAllSelectedStates(true);
            //_headerCheckBox.Unchecked += (s2, e2) => SetAllSelectedStates(false);
        }

        private void OnLoadingRow(object sender, DataGridRowEventArgs e)
        {
            object dataContext = e.Row.DataContext;
            FrameworkElement element = this.GetCellContent(e.Row);
            element.DataContext = GetMarkObject(dataContext);
        }

        private void SetAllSelectedStates(bool value)
        {
            if (_ownerDataGrid.ItemsSource == null)
                return;

            var enu = _ownerDataGrid.ItemsSource.GetEnumerator();
            while (enu.MoveNext())
            {
                GetMarkObject(enu.Current).IsSelected = value;
            }
            ClearItems();
        }

        private MarkObject GetMarkObject(Object obj)
        {
            if (_markObjects.ContainsKey(obj) == false)
            {
                MarkObject markObject;
                markObject = new MarkObject();
                _markObjects.Add(obj, markObject);
                markObject.PropertyChanged += (s, e) =>
                {
                    if (e.PropertyName == "IsSelected")
                    {
                        if (SelectedItemChanged != null)
                        {
                            SelectedItemChanged(this, EventArgs.Empty);
                        }
                    }
                };
            }
            return _markObjects[obj];
        }
    }



    public static class DataGridExtensions
    {
        internal static DataGridSelectColumn GetSelectColumn(this DataGrid dataGrid)
        {
            DataGridSelectColumn result = null;
            for (int i = 0; i < dataGrid.Columns.Count; i++)
            {
                result = dataGrid.Columns[i] as DataGridSelectColumn;
                if (result != null)
                    break;
            }
            return result;
        }

        public static void EnableSelect(this DataGrid dataGird)
        {
            var column = GetSelectColumn(dataGird);
            column.OwnerDataGrid = dataGird;
        }

        public static void SelectAll(this DataGrid dataGrid)
        {
            DataGridSelectColumn column = GetSelectColumn(dataGrid);
            if (column == null)
                throw new Exception("No Select Column");
            column.SelecteAll();
        }

        public static void UnselectAll(this DataGrid dataGrid)
        {
            DataGridSelectColumn column = GetSelectColumn(dataGrid);
            if (column == null)
                throw new Exception("No Select Column");
            column.UnselectAll();
        }

        public static List<T> GetSelectedItems<T>(this DataGrid dataGrid)
        {
            DataGridSelectColumn column = GetSelectColumn(dataGrid);
            if (column == null)
                throw new Exception("No Select Column");
            return column.GetSelectedItems<T>();
        }

        public static List<T> GetUnSelectedItems<T>(this DataGrid dataGrid)
        {
            DataGridSelectColumn column = GetSelectColumn(dataGrid);
            if (column == null)
                throw new Exception("No Select Column");
            return column.GetUnSelectedItems<T>();
        }

        public static void SetSelectedItems(this DataGrid dataGrid, IList items)
        {
            DataGridSelectColumn column = GetSelectColumn(dataGrid);
            if (column == null)
                throw new Exception("No Select Column");
            column.SetSelectedItems(items);
        }
    }
调用程序为: 
<pre name="code" class="csharp">private void setvalue()
        {           
            switch (type)
            {
                case 1://tcp设备
                    {
                        ud.Clear();
                        //dg_selected.ItemsSource = dg_unselect.GetSelectedItems<T_SBTCP>();//脱离数据库的界面显示选择项和去除选择项
                        //dg_unselect.ItemsSource = dg_unselect.GetUnSelectedItems<T_SBTCP>();
                        foreach (T_SBTCP t in dg_unselect.GetSelectedItems<T_SBTCP>())//调用
                        {
                                T_UserDev devs = new T_UserDev();
                                if (comb_user.SelectedIndex != -1)
                                {
                                    devs.user_id = userid;
                                    devs.sb_id = int.Parse(t.id.ToString());
                                    devs.p_id = 0;

                                    devs.type_id = int.Parse(t.SBTYPE.ToString());
                                    ud.Add(devs);                                    
                                }
                        }
                    }
                    break;<pre name="code" class="html">

 
 如果不操作数据库可以参考上面注掉的两条代码进行实现。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值