假设数据库有如下表,

首先我们创建一个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动态添加项并读取数据的更多相关文章

  1. Wpf DataGrid动态添加列,行数据(二)

    这是第二中方法,可直接绑定,我这里只是做出了一种思路,并不是最完美. 这里注意一下,因为我里面引用了MVVMLight,所以可能代码不是复制过去就能用了的. 样式也是,所以复制过去看不是我贴出来的界面 ...

  2. Wpf DataGrid动态添加列,行数据(一)

    由于最近有这方面的需求,而且刚接触wpf不久,在网上找了很多方法,都不是使用MVVM模式的,因为DataGrid的列不能绑定 这就难受了,我想了个折中的方法,这个是使用了MVVMLight的消息机制, ...

  3. GridView动态添加列之后,导致PostBack(回发)页面数据丢失问题解决

    直入主题,首先声明,这个问题是无法解决的,特此在这说明 一.如何动态添加列,如下: 在页面重写OnInit事件,至于为什么要在这个事件写,根据页面的声明周期和经验可知(不用去别的地方找了,这个我找了之 ...

  4. WPF Datagrid 动态生成列 并绑定数据

    原文:WPF Datagrid 动态生成列 并绑定数据 说的是这里 因为列头是动态加载的 (后台for循环 一会能看到代码) 数据来源于左侧列 左侧列数据源 当然num1 属于临时的dome使用  可 ...

  5. asp.net gridview动态添加列,并获取其数据;

    1,绑定数据前先动态添加列,见方法CreateGridColumn(只在第一次加载动态添加): 2,gvlist_RowDataBound为对应列添加控件: 前台代码: <%@ Page Lan ...

  6. C# WPF后台动态添加控件(经典)

    概述 在Winform中从后台添加控件相对比较容易,但是在WPF中,我们知道界面是通过XAML编写的,如何把后台写好的控件动态添加到前台呢?本节举例介绍这个问题. 这里要用到UniformGrid布局 ...

  7. GridView 动态添加绑定列和模板列

    动态添加绑定列很简单:例如: GridView1.DataSourceID = "SqlDataSource1"; BoundField bf1 = new BoundField( ...

  8. DotNetBar RibbonControl 控件动态添加项

    想做个插件式开发,界面用Dotnetbar的RibbonControl,需要通过代码动态的向RibbonControl控件添加项 示例代码如下: RibbonTabItem rti = new Rib ...

  9. GridView动态添加列并判断绑定数据DataTable的列类型控制展示内容

    此篇随笔是2013年根据项目需求开发记录的,不一定符合大众口味,只需了解开发思路,毕竟解决方案多种多样. 下面简单说说需求点吧: (1)通过下拉列表可以选择一个DataSet(数据集),一个DataS ...

随机推荐

  1. 负载均衡服务TCP端口健康检查成功,为什么在后端业务日志中出现网络连接异常信息?

    负载均衡服务TCP端口健康检查成功,为什么在后端业务日志中出现网络连接异常信息? 原文: https://help.aliyun.com/document_detail/127193.html?spm ...

  2. 小D课堂 - 零基础入门SpringBoot2.X到实战_第三节SpringBoot热部署devtool和配置文件自动注入实战_14、SpringBoot2.x使用Dev-tool热部署

    学习笔记 热部署 每次修改了代码都需要关闭应用重启 热部署就是有一个插件会监听我们应用的代码文件是否有变化,如果有变化就会有其他的类加载器加载 主要的依赖 复制到我们的pom.xml里面 安装完成ja ...

  3. flutter 中文件工具类

    添加依赖: path_provider: ^0.5.0+1 import 'dart:convert'; import 'dart:io'; import 'package:path_provider ...

  4. cordova run android 可能遇到的错误解决

    运行: ionic cordova build 等待下载,然后根据提示 输入android或者ios平台,即可 运行cordova run android 报错: 最快捷的解决方法就是使用Androi ...

  5. Vuex 的使用 State Mutation Getter Action

    import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex); /*1.state在vuex中用于存储数据*/ var state={ cou ...

  6. openresty开发系列30--openresty中使用http模块

    OpenResty默认没有提供Http客户端,需要使用第三方提供的插件 我们可以从github上搜索相应的客户端,比如https://github.com/pintsized/lua-resty-ht ...

  7. WPF分析工具

    分析WPF程序是理解其行为很重要的一步,市场上有大量现成的WPF程序分析工具,如Snoop,WPFPerf,Perforator和Visual Profiler,其中Perforator和Visual ...

  8. 软件定义网络基础---OpenFlow概述

    一:OpenFlow概述 二:交换机模型架构 (一)OpenFlow构架三个组成成分 三:OpenFlow 1.0版本 自OpenFlow1.0发布以来,目前已经有多个版本的OF规范版本被发布 四:O ...

  9. iptables 的安装与配置

    iptables 的安装与配置 由于centos7默认是使用firewall作为防火墙,下面介绍如何将系统的防火墙设置为iptables. #停止firewall  systemctl stop fi ...

  10. Activiti之act_ge_property表引发的坑(dbSchemaUpdate)

    Activiti之act_ge_property表引发的坑(dbSchemaUpdate) 参考文档: https://blog.csdn.net/lb19921223/article/details ...