1. 程式人生 > >lightswitch datagrid 動態新增複選框的功能。

lightswitch datagrid 動態新增複選框的功能。

lightswitch中非自定義datagrid 使用注入的方式新增複選框,以便使用者可以進行多項選擇,

using Microsoft.LightSwitch;
using Microsoft.LightSwitch.Client;
using Microsoft.LightSwitch.Presentation;
using System;
using System.Linq;
using System.Collections.ObjectModel;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Markup;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.LightSwitch.Framework.Client;
using Microsoft.LightSwitch.Presentation.Extensions;
using System.Diagnostics;
using Microsoft.LightSwitch.Presentation.Implementation;
using System.Collections.Generic;
namespace LightSwitchApplication
{
    public static class MultiSelectGridExtensions
    {
        public static void AddCheckBoxColumnForMultiSelection<T>(this IContentItemProxy gridProxy, ObservableCollection<T> selectedItems) where T : class,IEntityObject
        {
            EventHandler<ControlAvailableEventArgs> gridProxy_ControlAvailable = null;

            gridProxy_ControlAvailable = (s1, e1) =>
            {
                DataGrid dataGrid = e1.Control as DataGrid;
                var contentItem = dataGrid.DataContext as IContentItem;
                var visualCollection = (contentItem.Value) as IVisualCollection;
                dataGrid.LoadingRow += new EventHandler<DataGridRowEventArgs>((s2, e2) =>
                {
                    DataGridColumn column = dataGrid.Columns[0];
                    var checkBox = column.GetCellContent(e2.Row) as CheckBox;
                    T currentRowItem = e2.Row.DataContext as T;
                    if (currentRowItem != null)
                    {
                        checkBox.IsChecked = selectedItems.Contains(currentRowItem);
                    }

                    RoutedEventHandler checkboxClick = null;
                    checkboxClick = (
                        (s3, e3) =>
                        {
                            var selectedItem = dataGrid.SelectedItem as T;
                            if (selectedItem == null)
                            {
                                return;
                            }
                            if (checkBox.IsChecked ?? false)
                            {
                                if (!selectedItems.Contains(selectedItem))
                                {
                                    selectedItems.Add(selectedItem);
                                }
                            }
                            else
                            {
                                selectedItems.Remove(selectedItem);
                            }
                            TriggerCanExecute(visualCollection);
                        });
                    checkBox.Click += checkboxClick;
                });

                var col = new DataGridTemplateColumn(); // 動態新增模板
                var xaml =
                    @"<DataTemplate  xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation"">
                    <CheckBox/>
                </DataTemplate>";
                var dataTemplate = XamlReader.Load(xaml) as DataTemplate;
                col.CellTemplate = dataTemplate;
                dataGrid.Columns.Insert(0, col);

                gridProxy.ControlAvailable -= gridProxy_ControlAvailable;
            };

            gridProxy.ControlAvailable += gridProxy_ControlAvailable;
        }
        private static void TriggerCanExecute(IVisualCollection visualCollection)
        {
            //事件處理
            
            //
            var currentItem = visualCollection.SelectedItem;
            var collection = visualCollection as IEnumerable<IEntityObject>;

            if (!visualCollection.SelectedItem.Equals(collection.Last()))
            {
                visualCollection.SelectedItem = collection.Last();
            }
            else
            {
                visualCollection.SelectedItem = collection.First();
            }
            visualCollection.SelectedItem = currentItem;
        }
    }
}

在需要的介面中用法如下:

public partial class EditableProductsGrid
    {
        ObservableCollection<Product> SelectedProducts = new ObservableCollection<Product>();

        partial void EditableProductsGrid_InitializeDataWorkspace(List<IDataService> saveChangesTo)
        {
            this.FindControl("grid").AddCheckBoxColumnForMultiSelection<Product>(SelectedProducts);
        }

        partial void DoSomethingWithSelection_Execute()
        {
            foreach (var item in SelectedProducts)
            {
                this.ShowMessageBox(item.ProductName);
            }
        }

        partial void DoSomethingWithSelection_CanExecute(ref bool result)
        {
            result = this.Products.SelectedItem != null && SelectedProducts.Count >= 1; ;
        }
}


相關推薦

lightswitch datagrid 動態新增功能

lightswitch中非自定義datagrid 使用注入的方式新增複選框,以便使用者可以進行多項選擇,using Microsoft.LightSwitch; using Microsoft.LightSwitch.Client; using Microsoft.Light

VC++ 如何向一個列表控制元件中動態新增

宣告:由於自己的程式設計需要,這裡的列表控制元件只有一列,是list樣式。 1.首先給列表控制元件關聯一個成員變數,例如: DDX_Control(pDX, IDC_LIST_DtvParent, m

為DataGridView 新增,實現全功能

1、指定DataGridView的第一列為DataGridViewCheckBoxColumn 2、為第一列的標題欄新增一個CheckBox,假設為HeaderCheckBox同時為HeaderCheckBox定義好 MouseClick 和 KeyUp 事件priva

金蝶bos 自定義UI介面新增控制元件,並且做業務處理

 /**      * 顯示工程型別      * @author daihao      * 

easyui datagrid 建立帶表格(2)

1.原始碼 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta name="keywords" content="jquery,

【機房重構】DataGridView中新增

實現效果 DataGridView列頭新增複選框 //宣告靜態類變數 private static DataGridViewCheckBoxColumn checkColumn = null; private void cmbJiBie_SelectedIndexChang

vue element UI el-table 給表格新增,並得到所

<el-table @selection-change="changeFun"> <el-table-column type="selection"> </el-table-column> </el-table>

PyQt treewiget新增,並獲取是否選中

# -*- coding: utf-8 -*- import sys from PyQt4.QtGui import * from PyQt4.QtCore import * class TreeWidget(QWidget): def __in

解決layui動態載入無法選中

問題描述 1.最近用layui做後臺介面,遇到layui跟ajax資料動態載入的checkbox,偶爾不能正常勾選,取消 2.有分頁時,最後一頁資料過少會導致其他頁下方資料無法選中 3.頁面沒載入完或暴力測試時也會不能選中 利用layui更新渲染方法和網上的一些方法去解決後極大的

自定義表格新增

最近做個購物車, 需要自己在表格中實現一個複選框的列: <input type="checkbox" onclick="allcheck(this.checked)"/>全選 <td><input type="checkbox" name="

Query+ztree實現下拉樹功能

完整專案下載連結: CSDN下載頁 檔案比較大是由於該功能是在公司專案中實現的,公司用了AdminLTE.css,其實做這個功能用到的並不多,如果不用該css也沒影響,就是下拉框div會變成圓角,自己改下樣式就行了。在打包上傳的時候我將jquery,boot

Qt 之 QHeaderView 新增

簡述 前面分享了QTableView中如何新增複選框。本節主要介紹QTableView中的表頭-QHeaderView新增複選框的功能,下面以水平表頭為例,垂直表頭類似! | 效果 QHeaderView 原始碼 TableHead

EASYUI DATAGRID 多列CheckBox

主要實現: 用的 easyui 1.3.2 實現多個複選框列,各列互不影響。能夠實現全選。主要部門用紅色標記了的。 easyui datagrid 初始化: <script> function initTableGMAL() {

datatable動態生成

首先需要說明: 1,原始的datatable是沒有複選操作和批量操作的 2,當用戶點選批量的時候做了非空判斷,然後選中後再將選中的資料id以連結的方式傳遞到下一個頁面 3,整個頁面是jsp格式 <a href="javascript:void

datatables 新增及序號列及使用ajax請求

1.頁面引入樣式 和 js 檔案 2. html 程式碼 <table id="keeperUserList" class="display table table-striped table-bordered table-hover table-checkabl

input功能

<input type="checkbox" name="test"/>1 <input type="checkbox" name="test"/>2 <input type="checkbox" name="test"/>3 $(':checkbox[name="tes

自定義相簿時候的☑️問題

我的相簿裡是一個recycleView所以操作起來也很方便,我這裡直接就貼上條目佈局 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.

extjs4當中的gridpanel,翻頁後保持內容

這還真意外的花了一些時間,趕緊寫下來有助於記憶…… 說真的對extjs控制元件命令瞭解的太少了,還得多下點功夫才行…… Ext.extend(DsTruck.FinanceOut, Ext.Panel, { PageSize: 6,//用於控制每頁的行數

###①datatable客戶端分頁,全只能選中一頁(能力有限,(雖然不是服務端分頁),同事-老大都不知道)+ ②【動態新增刪除CheckBox的ID】 JQuery datatables 表頭切換頁面時保持選中的問題

①datatable客戶端分頁,全選只能選中一頁(能力有限,(雖然不是服務端分頁),同事-老大都不知道)。 對於要解決的問題: 【 JQuery datatables 表頭複選框切換頁面時保持選中的問題 】 ==== 這個:https://blog.csdn.net/nihaoqiuli

AJAX——動態新增控制元件()

需求:使用者根據自己的需求,配置下拉框中的欄位。 解決思路:使用者配置下拉框中的欄位(例如:高階查詢,基礎資訊),動態新增複選框控制元件。使用者再對複選框進行勾選,最終結果是,基礎資訊中的,高階查詢下拉框中為使用者勾選的欄位。 前臺程式碼: <asp:Content