WPF GridView动态添加项并读取数据
假设数据库有如下表,

首先我们创建一个WPF工程,界面如下
<Window x:Class="WpfApplication2.MainWindow"
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"
xmlns:local="clr-namespace:WpfApplication2"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525" Loaded="Window_Loaded">
<Grid>
<ListView x:Name="listview">
<ListView.View>
<GridView x:Name="gridview"></GridView>
</ListView.View>
</ListView>
</Grid>
</Window>

然后创建配置文件。这里我用的是XML文件,
这里我们假设只显示Name,Height,Age三个字段 ,所以配置文件中只增加三项。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<List>
<Item Header="Name" Width="100"></Item>
<Item Header="Height" Width="80"></Item>
<Item Header="Age" Width="80"></Item>
</List>
下面是实现代码
using System;
using System.Collections.Generic;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Xml.Linq;
using System.Xml.XPath;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Globalization; namespace WpfApplication2
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
} private void Window_Loaded(object sender, RoutedEventArgs e)
{
//动态添加项
DynamicAddItem();
//显示数据
DataTable dt = GetData();
this.listview.ItemsSource = dt.DefaultView; } /// <summary>
/// 动态添加列表项
/// </summary>
private void DynamicAddItem()
{
List<TestItem> list = GetAllItems();
foreach (var item in list)
{
GridViewColumn column = new GridViewColumn();
column.Header = item.Header;
column.Width = item.Width;
if (item.Header == "Age")
{
//有时候我们可能会用到数据转换
//这里以年龄后面加个岁为例
AgeConverter converter = new AgeConverter();
column.DisplayMemberBinding = new Binding(item.Header) { Converter = converter};
}
else
{
column.DisplayMemberBinding = new Binding(item.Header);
}
this.gridview.Columns.Add(column);
}
} /// <summary>
/// 从配置文件读取要显示的项
/// </summary>
/// <returns></returns>
private List<TestItem> GetAllItems()
{
List<TestItem> list = new List<TestItem>();
XDocument doc = XDocument.Load("list.xml");
var result = doc.XPathSelectElements("List/Item");
if(result != null)
{
foreach (var item in result)
{
TestItem ti = new TestItem();
ti.Header = item.Attribute("Header").Value;
ti.Width = Convert.ToInt32(item.Attribute("Width").Value);
list.Add(ti);
}
}
return list;
} /// <summary>
/// 从数据库获取数据
/// </summary>
/// <returns></returns>
private DataTable GetData()
{
DataTable dt = new DataTable();
string sql = "";
string conStr = ConfigurationManager.ConnectionStrings["conStr"].ConnectionString;
try
{
SqlConnection con = new SqlConnection(conStr);
sql = "select * from Student";
SqlDataAdapter sda = new SqlDataAdapter(sql,con);
sda.Fill(dt);
return dt;
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
return dt;
}
}
} struct TestItem
{
public string Header { get; set; } public int Width { get; set; }
} public class AgeConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return value + "岁";
} public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
} }
运行效果

WPF GridView动态添加项并读取数据的更多相关文章
- Wpf DataGrid动态添加列,行数据(二)
这是第二中方法,可直接绑定,我这里只是做出了一种思路,并不是最完美. 这里注意一下,因为我里面引用了MVVMLight,所以可能代码不是复制过去就能用了的. 样式也是,所以复制过去看不是我贴出来的界面 ...
- Wpf DataGrid动态添加列,行数据(一)
由于最近有这方面的需求,而且刚接触wpf不久,在网上找了很多方法,都不是使用MVVM模式的,因为DataGrid的列不能绑定 这就难受了,我想了个折中的方法,这个是使用了MVVMLight的消息机制, ...
- GridView动态添加列之后,导致PostBack(回发)页面数据丢失问题解决
直入主题,首先声明,这个问题是无法解决的,特此在这说明 一.如何动态添加列,如下: 在页面重写OnInit事件,至于为什么要在这个事件写,根据页面的声明周期和经验可知(不用去别的地方找了,这个我找了之 ...
- WPF Datagrid 动态生成列 并绑定数据
原文:WPF Datagrid 动态生成列 并绑定数据 说的是这里 因为列头是动态加载的 (后台for循环 一会能看到代码) 数据来源于左侧列 左侧列数据源 当然num1 属于临时的dome使用 可 ...
- asp.net gridview动态添加列,并获取其数据;
1,绑定数据前先动态添加列,见方法CreateGridColumn(只在第一次加载动态添加): 2,gvlist_RowDataBound为对应列添加控件: 前台代码: <%@ Page Lan ...
- C# WPF后台动态添加控件(经典)
概述 在Winform中从后台添加控件相对比较容易,但是在WPF中,我们知道界面是通过XAML编写的,如何把后台写好的控件动态添加到前台呢?本节举例介绍这个问题. 这里要用到UniformGrid布局 ...
- GridView 动态添加绑定列和模板列
动态添加绑定列很简单:例如: GridView1.DataSourceID = "SqlDataSource1"; BoundField bf1 = new BoundField( ...
- DotNetBar RibbonControl 控件动态添加项
想做个插件式开发,界面用Dotnetbar的RibbonControl,需要通过代码动态的向RibbonControl控件添加项 示例代码如下: RibbonTabItem rti = new Rib ...
- GridView动态添加列并判断绑定数据DataTable的列类型控制展示内容
此篇随笔是2013年根据项目需求开发记录的,不一定符合大众口味,只需了解开发思路,毕竟解决方案多种多样. 下面简单说说需求点吧: (1)通过下拉列表可以选择一个DataSet(数据集),一个DataS ...
随机推荐
- AWS Fargate
AWS Lambda都是浮云,AWS Fargate才是王道——无服务器的未来,有我没你! - DockOne.iohttp://www.dockone.io/article/4656 通过 Farg ...
- Windows下压缩包安装Mysql
1. 下载mysql压缩包 2. 解压到指定目录,例如D:\Program Files\mysql-5.7.25-winx64 3. 在目录下创建配置文件my.ini [mysqld] port = ...
- linux服务之dns
安装dig工具 [root@cu-app-107 ~]# cat /etc/redhat-releaseCentOS Linux release 7.5.1804 (Core) [root@cu-ap ...
- python-learning-第二季-数据库编程
https://www.bjsxt.com/down/8468.html 代码实现: #coding:utf- #导入模块 import sqlite3 #创建connect连接 con = sqli ...
- WPF richTextBox 滚动到某项
在网上没有找到合适的代码,自己写了一段,还有待优化... 直接上代码 /// <summary> /// 滚动到某项 /// </summary> /// <param ...
- Spring5源码分析之Bean生命周期
Spring Bean生命周期的构成 Bean的完整生命周期经历了各种方法调用,这些方法可以划分为以下几类: Bean自身的方法: 这个包括了Bean本身调用的方法和通过配置文件中<bean&g ...
- 报错:MetaException(message:Version information not found in metastore. )
报错背景: CDH安装完成hive后启动失败. 报错现象: [main]: Metastore Thrift Server threw an exception... MetaException(me ...
- dubbo+zookeeper+springboot简单示例
目录 dubbo+zookeeper+springboot简单示例 zookeeper安装使用 api子模块 生产者producer 消费者consumer @(目录) dubbo+zookeeper ...
- 如何让winrar5压缩的文件能用低版本winrar打开
https://jingyan.baidu.com/article/39810a2348ab24b636fda681.html 在压缩文件格式选项处点选[RAR4]选项,即之前版本的winrar支持的 ...
- 基于ADO的远程Oracle连接
最近在一个通过MFC做一个界面,通过这个界面可以对布置在另一台服务器上的数据库MySQL.SQl Server.Oracle进行增删创建表的操作.其中我通过ADO很快就完成了对MySQL和SQL Se ...