假设数据库有如下表,

首先我们创建一个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. Flutter ------- WebView加载网页

    在Flutter 加载网页?也是有WebView的哦,和Android一样 1.添加依赖 dependencies: flutter_webview_plugin: ^0.2.1+2 2.导入库 im ...

  2. 006 认识BeanNameAware

    在看Spring的生命周期,就要注意到Spring Aware,Aware是什么,在这篇文章中,主要是说明三个部分,Spring的生命周期[这个在后面会继续说明,这里这是一个大纲],然后说明Sprin ...

  3. 小D课堂 - 零基础入门SpringBoot2.X到实战_第1节零基础快速入门SpringBoot2.0_1、SpringBoot2.x课程介绍和高手系列知识点

    1 ======================1.零基础快速入门SpringBoot2.0 5节课 =========================== 1.SpringBoot2.x课程全套介绍 ...

  4. Vue 及双向数据绑定 Vue事件 以及Vue中的ref获取dom节点

    <template> <div id="app"> <h2>{{msg}}</h2> <input type="te ...

  5. python声明类时继承不继承object类的区别

    不加的叫做经典类或旧式类,但是现在python3的类都默认是继承了object的,所以可写可不写 下面举个例子说明: 首先说明下__class__功能与用法: __class__功能和type()函数 ...

  6. 【PHP】图片转换为base64,经过post传输后‘+’会变成 ‘空格’

    图片转换为base64,经过post传输后‘+’会变成 ‘空格’, 需要用PHP 处理一下 $str= $_POST['img_data']; $str= str_replace(' ','+',$s ...

  7. NSGA,NSGA-II,Epsilon-MOEA,DE C语言Deb教授原版代码

    NSGA,NSGA-II,Epsilon-MOEA,Basic Differential Evolution (DE) C语言Deb教授原版代码地址 觉得有用的话,欢迎一起讨论相互学习~[Follow ...

  8. [转]Connecting To SQLite Database Using Node.js

    原文链接:http://www.sqlitetutorial.net/sqlite-nodejs/connect/

  9. AtCoder Beginner Contest 147 E. Balanced Path

    思路: dp,使用了bitset优化. 实现: #include <bits/stdc++.h> using namespace std; ; const int INF = 0x3f3f ...

  10. 【机器学习】attention机制

    参考: 1.https://lilianweng.github.io/lil-log/2018/06/24/attention-attention.html