精华内容
下载资源
问答
  • wpf动态列datagrid

    2019-03-22 08:52:18
    wpf 带有动态列datagrid
  • WPF DataGrid 动态列绑定

    千次阅读 2019-05-24 17:23:15
    WPF DataGrid 动态列绑定 代码: <Grid> <DataGrid Name ="dataGrid" HeadersVisibility="Column" ItemsSource="{Binding}" DisplayMemberPath="Data" CanUserAddRows =" Fal...

    WPF DataGrid 动态列绑定

    代码:

    <Grid>
        <DataGrid Name ="dataGrid"  HeadersVisibility="Column"  
                  ItemsSource="{Binding}" DisplayMemberPath="Data"  
                  CanUserAddRows =" False"
                  AutoGenerateColumns="False" />
    </Grid>
    
    
    public partial class MainWindow : Window
    {
        private ObservableCollection<string[]> _obervableCollection = new ObservableCollection<string[]>();
    
        public MainWindow()
        {
            InitializeComponent();
            addColumns();
            addRow();
        }
    
        void addColumns()
        {
            for (int i = 0; i < 3; i++)
            {
                this.dataGrid.Columns.Add(new DataGridTextColumn() { Header = "Row" + i, Binding = new Binding("[" + i.ToString() + "]") });
            }
    
            dataGrid.IsReadOnly = true;
            dataGrid.ItemsSource = _obervableCollection;
        }
    
        void addRow()
        {
            string[] list1 = new string[3] { "1", "2", "3" };
            _obervableCollection.Add(list1);
    
            string[] list2 = new string[3] { "4", "5", "6" };
            _obervableCollection.Add(list2);
    
            string[] list3 = new string[3] { "7", "8", "9" };
            _obervableCollection.Add(list3);
        }
    }
    
    展开全文
  • WPF datagrid 动态增加

    2015-07-31 11:43:00
    DataGrid动态增加 <Window x:Class="WpfApplication1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/20...

    DataGrid动态增加列

     

    复制代码
    <Window x:Class="WpfApplication1.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="MainWindow" Height="350" Width="525">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="*"/>
            </Grid.RowDefinitions>
            <StackPanel Orientation="Horizontal">
                <Button Content="Add Column" Click="AddColumn_Click" Margin="5"/>
                <Button Content="Add Data" Click="AddData_Click" Margin="5"/>
            </StackPanel>
            <DataGrid x:Name="dataGrid" AutoGenerateColumns="True" Grid.Row="1"/>
        </Grid>
    </Window>
    复制代码

     

    复制代码
    using System;
    using System.Collections.Generic;
    using System.Collections.ObjectModel;
    using System.Dynamic;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    
    namespace WpfApplication1
    {
        /// <summary>
        /// MainWindow.xaml 的交互逻辑
        /// </summary>
        public partial class MainWindow : Window
        {
            ObservableCollection<ExpandoObject> items = new ObservableCollection<ExpandoObject>();
            public MainWindow()
            {
                InitializeComponent();
                for (int i = 0; i < 5; i++)
                {
                    dynamic item = new ExpandoObject();
                    item.A = "Property A value - " + i.ToString();
                    item.B = "Property B value - " + i.ToString();
                    items.Add(item);
                }
    
                dataGrid.Columns.Add(new DataGridTextColumn() { Header = "A", Binding = new Binding("A") });
                dataGrid.Columns.Add(new DataGridTextColumn() { Header = "B", Binding = new Binding("B") });
                dataGrid.ItemsSource = items;
            }
    
            private void AddData_Click(object sender, RoutedEventArgs e)
            {
                dynamic item = new ExpandoObject();
                item.A = "New Item - A";
                item.B = "New Item - B";
                items.Add(item);
            }
    
            int newColumnIndex = 1;
            private void AddColumn_Click(object sender, RoutedEventArgs e)
            {
                foreach (IDictionary<String, Object> item in items)
                {
                    item.Add("NewColumn" + newColumnIndex, "New Column Value - " + newColumnIndex.ToString());
                }
    
                dataGrid.Columns.Add(new DataGridTextColumn() { Header = "New Column" + newColumnIndex, Binding = new Binding("NewColumn" + newColumnIndex) });
    
                newColumnIndex++;
            }
        }
    }
    复制代码

     https://social.microsoft.com/Forums/zh-CN/69ac1292-9512-4bd3-b691-795f64cb0aa0/wpf-datagrid-?forum=wpfzhchs

    转载于:https://www.cnblogs.com/lsgsanxiao/p/4691773.html

    展开全文
  • WPF DataGrid 动态列 总结

    千次阅读 2019-03-22 09:13:06
    特殊情况下会遇到做一个带有动态列DataGrid(比如前面几列固定 后面列数不固定),这里用一个第一列固定,column1往后不确定作为示例简单记录一下。 首先给一个字符串数组(也有可能是复杂的类集合,这里简单地...

    特殊情况下会遇到做一个带有动态列的DataGrid(比如前面几列固定 后面列数不固定),这里用一个第一列固定,column1往后不确定作为示例简单记录一下。

    首先给一个字符串数组(也有可能是复杂的类集合,这里简单地以数组为例):

    private static string[] dynamicColumns;
    

    DataGrid将以这个数组的元素个数,自动生成列,并绑定数据。

    再来给数组赋一下值:

    dynamicColumns = new string[6] { "Column1", "Column2", "Column3", "Column4", "Column5", "Column6" };//假设6列

    前端给一个DataGrid:

    <DataGrid x:Name="grid" ItemsSource="{Binding}" AutoGenerateColumns="False"></DataGrid>

    接下来用一个例子来模拟测试一下:

    首先创建一个实体类,作为datagrid的每行数据类型:

        public class NewTestItem
        {
            private string idOrDescription;
    
            public string IdOrDescription
            {
                get { return idOrDescription; }
                set
                {
                    idOrDescription = value;
                }
            }
    
            private string column1;
    
            public string Column1
            {
                get { return column1; }
                set { column1 = value; }
            }
    
            private string column2;
    
            public string Column2
            {
                get { return column2; }
                set { column2 = value; }
            }
    
            private string column3;
    
            public string Column3
            {
                get { return column3; }
                set { column3 = value; }
            }
    
            private string column4;
    
            public string Column4
            {
                get { return column4; }
                set { column4 = value; }
            }
    
            private string column5;
    
            public string Column5
            {
                get { return column5; }
                set { column5 = value; }
            }
        }

    根据dynamicColumns数组生成这个datagrid:

    private void GenerateGrid(object obj)
    {
        object[] array = (object[])obj;
        grid = array[0] as DataGrid;
    
        var columnIdOrDescription = new DataGridTextColumn();
        columnIdOrDescription.Header = "Project";
        columnIdOrDescription.Binding = new Binding("IdOrDescription");
        columnIdOrDescription.Width = new DataGridLength(1, DataGridLengthUnitType.Star);
        columnIdOrDescription.CellStyle = null;
        grid.Columns.Add(columnIdOrDescription);
    
        for (int i = 0; i < dynamicColumns.Length; i++)
        {
            var column = new DataGridTextColumn();
            column.Header = dynamicColumns[i];
            column.Binding = new Binding(dynamicColumns[i]);
            column.Width = new DataGridLength(1, DataGridLengthUnitType.Star);
            grid.Columns.Add(column);
        }
    
        grid.SetBinding(DataGrid.ItemsSourceProperty,"Items");
    }

    完整的代码地址

     

    展开全文
  • WPFDataGrid 动态增加

    千次阅读 2019-09-03 23:20:48
    WPF的项目中希望给DataGrid动态添加,而不是添加行。例如,现有的列名是“规则一”、“规则二”,他们希望能够不断添加新的规则(每按一次键添加新的一),然后再在DataGrid里输入、修改。就是要像Access一样...

    在WPF的项目中希望给DataGrid动态添加列,而不是添加行。例如,现有的列名是“规则一”、“规则二”,他们希望能够不断添加新的规则(每按一次键添加新的一列),然后再在DataGrid里输入、修改。就是要像Access一样。

    WPF中所有的ItemsControl只支持一维的数据结构,简单理解,我们熟悉的ListBox,ListView, ComboBox, 甚至DataGrid 都是仅支持一个维度的集合。为啥DataGrid有行和列? 其实是一个维度嵌套在另一个维度中,就能够形成二维的集合结构,但是对于DataGrid来说,对于它能够直接操作的还是第一维的DataGridRow。 我们集合中每一行元素或者讲每一个元素都是会被一个 DataGridRow包装好放入DataGrid。 然后在DataGridRow还会有进一步的每个元素的各个属性的包装 DataGridCell。在WPF中,DataGrid的可视树中是根本没有所谓列的概念的,只有行和单元格的概念。所以要动态添加列,只有在DataGrid没有显示前增加,即在DataGrid的逻辑树里面增加。 或者我们可以动态增加DataGrid所绑定的DataTable的列,然后重新设置DataGrid的绑定,让DataGrid重新根据数据源来自动生成列。

    不过这里也有一种方式,ObservableCollection集合里面是一个dynamic类型,它可以动态的添加属性,这种类型添加好属性之后,重新设置DataGrid的ItemsSource绑定即可,这种方式很多地方可以找到,代码如下:

     ObservableCollection<dynamic> items = new ObservableCollection<dynamic>();
        public MainWindow()
        {
          InitializeComponent();
     
          for (int i = 0; i < 5; i++)
          {
            dynamic item = new DynamicObjectClass();
            item.A = "Property A value - " + i.ToString();
            item.B = "Property B value - " + i.ToString();
            items.Add(item);
          }
     
          dataGrid.Columns.Add(new DataGridTextColumn() {Header="A", Binding = new Binding("A") });
          dataGrid.Columns.Add(new DataGridTextColumn() {Header="B", Binding = new Binding("B") });
          dataGrid.ItemsSource = items;
        }
     
        private void AddData_Click(object sender, RoutedEventArgs e)
        {
          dynamic item = new DynamicObjectClass();
          item.A="New Item - A";
          item.B="New Item - B";
          items.Add(item);
        }
     
        int newColumnIndex = 1;
        private void AddColumn_Click(object sender, RoutedEventArgs e)
        {
          foreach (DynamicObjectClass item in items)
          {
            item.TrySetMember(new SetPropertyBinder("NewColumn" + newColumnIndex), "New Column Value " + newColumnIndex.ToString());
          }
     
          dataGrid.Columns.Add(new DataGridTextColumn() { Header = "New Column" + newColumnIndex, Binding = new Binding("NewColumn" + newColumnIndex) });
     
          newColumnIndex++;
        }

    对应的类及对象如下,每次新增列为属性NewColumn及其对应值:

    item

    A->Property A value 0

    B->Property B value 0

    NewColumn1-->New Value1

     

    item

    A->Property A value 1

    B->Property B value 1

    NewColumn1-->New Value1

     

    item

    A->Property A value 2

    B->Property B value 2

    NewColumn1-->New Value1

    item

    A->Property A value 3

    B->Property B value 3

    NewColumn1-->New Value1

    item

    A->Property A value 4

    B->Property B value 4

    NewColumn1-->New Value1

     

    通过以上也发现,实际上新增的列为item列表下中对象的属性及其值,如果以此看做一列的话,实际上操作的还是item对应的一行。所以,也有第二种方式,即选择DataTable作为数据源,在DataTable里面动态增加了列之后,重新构造每一行数据,设置DataGrid.ItemsSource = null; 然后再重新设置ItemsSource到DataTable。代码大致如下:

      DataTable dt = new DataTable();
        public MainWindow()
        {
          InitializeComponent();
     
          dt.Columns.Add(new DataColumn("Column1"));
          dt.Columns.Add(new DataColumn("Column2"));
     
          DataRow dr;
          for (int i = 0; i < 5; i++)
          {
            dr = dt.NewRow();
            for (int columIndex = 0; columIndex < dt.Columns.Count ; columIndex++)
              dr[columIndex] = i.ToString() + " - " + columIndex.ToString();
            dt.Rows.Add(dr);
          }
     
            dataGrid.ItemsSource = dt.DefaultView;
        }
     
        private void AddData_Click(object sender, RoutedEventArgs e)
        {
          DataRow dr = dt.NewRow();
          for (int columIndex = 0; columIndex < dt.Columns.Count; columIndex++)
            dr[columIndex] = "New Row - " + columIndex.ToString();
          dt.Rows.Add(dr);
        }
     
        int newColumnIndex = 1;
        private void AddColumn_Click(object sender, RoutedEventArgs e)
        {
          dt.Columns.Add(new DataColumn("New Column" + newColumnIndex++));
          for (int i = 0; i < dt.Rows.Count; i++)
          {
            dt.Rows[i][dt.Columns.Count - 1] = i.ToString() + " - New Column";
          }
          dataGrid.ItemsSource = null;
          dataGrid.ItemsSource = dt.DefaultView;
        }

     

    展开全文
  • WPF Datagrid 动态生成 并绑定数据

    千次阅读 2019-10-09 11:10:35
    说的是这里 因为头是动态加载的 (后台for循环 一会能看到代码) 数据来源于左侧 左侧数据源 当然num1 属于...WPF 动态生成对象属性 (dynamic) ObservableCollection<NameList> listName = new O...
  • WPFDataGrid动态生成

    千次阅读 2019-04-16 10:46:14
    在XMAL的WIndow中,定义一个x:Nam ="dataShow"的DataGrid控件 后台,在Load事件中,可以这样写 dataPage.dataShow.Columns.Clear();//每次清空集合 string tempStr = String.Empty ; for ...
  • WPF-DataGrid后台动态生成

    万次阅读 2016-03-14 15:49:29
    DataGrid后台动态生成 Now that you know the basics of the Silverlight DataGrid and how to specify the Columns in XAML, you might want to customize your DataGrid's columns at runtime. This ...
  • 由于最近有这方面的需求,而且刚接触wpf不久,在网上找了很多方法,都不是使用MVVM模式的,因为DataGrid不能绑定 这就难受了,我想了个折中的方法,这个是使用了MVVMLight的消息机制,我就不说太多了,直接上...
  • MVVM实现WPFDataGrid动态列与编辑器

    热门讨论 2011-01-12 22:44:42
    使用MVVM模式对WPF中的DataGrid控件动态添加,并实现了编辑模式。
  • < DataTrigger Binding =" {Binding RelativeSource={RelativeSource Self}, Path=Column....上面的是datagrid第一的单元格背景色根据值改变。 转载于:https://www.cnblogs.com/czly/p/11190695.html
  • 添加数据 /// /// 列名 /// 显示列名 /// 填充的数据 public void AddColumn( string columnName, string Header, List< string > vs) { int i = 0 ; int ...
  • //创建DataGridTemplateColumn var column= new DataGridTemplateColumn(); column.CanUserResize = false; column.CanUserReorder = false; column.Header = ""; //创建FrameworkElementFactory ...
  • 需求:根据另一控件改变DataGrid的可见性(Collapsed/Hidden/Visible)原本 绑定字段是这样写的:Visibility="{Binding ElementName=sample,Path=IsChecked,Converter={StaticResource BoolConverter}}&...
  • WPF Grid + DataGrid多表头 动态列实现

    千次阅读 2016-12-12 20:34:49
    Grid + DataGrid简单实现了多表头,动态列。Mark~
  • DataGrid动态添加的。现在编辑某一行之后。再点击另外一行会跳出异常:双向绑定需要Path或XPath 。求大神帮忙~ 前台: ``` <DataGrid x:Name="gridData" CanUserResizeColumns="True" IsReadOnly=...
  • 一、后台动态生成DataGrid 1 HistoricalDataDG.Columns.Clear(); 2 HistoricalDataDG.Columns.Add(new DataGridTextColumn() { Header = "时间", ElementStyle = (System.Windows.Style)FindResource(...
  • WPF 动态生成DataGrid

    2020-12-03 09:40:52
    动态生成DataGrid,包括分页、checkbox、动态绑定数据动态生成按钮并绑定事件、允许泛型数据类 最新效果图: 效果如下: 使用只需要配置即可: <datagridwithpages:DataGridWithPage Grid.Row="0" Name=...
  • 在工作中遇见的,需要动态生成,所以,这里随便写一个很简单的,欢迎补充,如有引用或转载,请标注说明,谢谢!!! 今天遇见一个情况,同一个功能,因为登录人员不同,显示不同的内容,为了保证扩展性,就想到了...
  • 现在需要根据数据库一张表中的数据字段(例如Students表中的Name字段)在这个DataGrid动态添加。并实现前端根据Students表实时进行更新。 代码: <DataGrid ItemsSource="{Binding Schools,...
  • WPF环境下,手工为Datagrid设置数据方式如下,如果属性比较多,就比较麻烦,并且xaml窗口代码也比较多。 <DataGrid> <DataGrid.Columns> <DataGridTextColumn Header="编号" Binding="{...
  • 如题,目前使用资源字典动态加载header值 之后 只显示默认的文本内容。也就是如何让datagrid也支持多语言的动态切换功能
  • 实习那会儿,公司里WinFrom的数据表格也是根据xml配置文件动态生成的,只怪当时没有好好看源码,后来上网学习里一些有关xml才下手搞一个基于wpf 、c# 动态生成DataGrid列。 想要通过代码生成数据表格还是得...
  • WPF+Datagrid

    2020-03-05 15:13:14
    文章目录Datagrid列的文本居中Datagrid列的头部标题居中Datagrid列动态创建及设置居中显示 Datagrid列的文本居中 <!--的文本居中--> <Style x:Key="DataGridTextColumnCenterSytle" TargetType="{x:Type...
  • WPF DataGridTable

    2019-01-18 18:54:00
    由于项目要显示表头合并,而数据源随时变更,又不想重复的画表格,就实现动态数据(dynamic)绑定和配置数据模板的方式 编辑DataGridColumnHeader样式实现表头合并:效果如下 实现思路: 在表头中插入一个Grid...
  • 表头样式 [ DataGridColumnHeader ] 默认带分割线,但每表头左右分割线都占1px,也就是说假如有三:a. 表格最左、右边应该不需要分割线,但默认的有1pxb. 中间需要1px分割线,但默认有2px(相邻...
  • 问题描述 ...但是这个datagrid里面数据量比较大,而且部分动态生成的,对整个datagrid刷新会出现部分动态生成没有正常加载。体验很不好。如果能只刷新这一,其他的不管,就好了。 ##解决方案...
  • 本来是想用DataGrid做一个CheckBox的用于勾选其中的某些行,当时做出来之后想着添加一个全选、全否的功能。做两个按钮觉得太丑,就想着在标题栏做一个CheckBox实现此功能。开始不用会用模板,网上查了些资料可以用...

空空如也

空空如也

1 2 3 4
收藏数 71
精华内容 28
关键字:

datagridwpf动态列