WPF学习日志1---DataGrid绑定与修改更新(数据List & 数据库)[部分代码有摘录其他文章]
2016-01-03 15:51
796 查看
本内容分为三大块:
DataGrid数据绑定显示
内容修改—后台源数据
内容修改—数据库源数据
DataGrid数据绑定显示
其实数据显示也分为后台源数据与数据库源数据两部分,因为类似度较高所以合并一起写了。
先看后台源数据:
a.首先得有一个源数据的类
b.然后需要一个数据集合
c.前端DataGrid的数据绑定
d.将数据源关联至控件中
再看数据库的源数据:
a.先设定访问数据库的参数
b.打开数据库
c.查询内容
d.将内容关联至控件中
2.内容修改—后台源数据
由于使用了TwoWay模式,在DataGrid上面的修改被直接更新:
3.内容修改—数据库源数据
PS:下面介绍一下即刻更新的方法
DataGrid数据绑定显示
内容修改—后台源数据
内容修改—数据库源数据
DataGrid数据绑定显示
其实数据显示也分为后台源数据与数据库源数据两部分,因为类似度较高所以合并一起写了。
先看后台源数据:
a.首先得有一个源数据的类
class Students { public string Id { get; set; } public string Name { get; set; } public string Age { get; set; } //省略了字段,直接来属性 }
b.然后需要一个数据集合
ObservableCollection stuList = new ObservableCollection() { new Students(){Id = "0",Name = "Tim",Age = "29"}, new Students(){Id = "1",Name = "Tom",Age = "28"}, new Students(){Id = "2",Name = "Kyle",Age = "30"}, }; //这里面可以直接用List集合,但是一般来说在可以修改的DataGrid里面,需要一个及时更新的机制,所以如果使用List集合,就必须实现INotifyPropertyChanged接口,接口的具体实现我将在下篇中详细讲述。因为ObservableCollection集合自带了更新的接口,所以直接用这个会比较方便。
c.前端DataGrid的数据绑定
<DataGrid x:Name="DataGrid" HorizontalAlignment="Left" Height="Auto" Margin="81,125,0,0" VerticalAlignment="Top" Width="Auto" BorderThickness="0" HeadersVisibility="Column" > <DataGrid.Columns> <DataGridTextColumn Header="id" Binding="{Binding id,Mode=TwoWay}"/> <DataGridTextColumn Header="title" Binding="{Binding title,Mode=TwoWay}" /> </DataGrid.Columns> </DataGrid> //这边要注意的是首列隐藏HeadersVisibility,会让整体表格看起来美观;自动创建列AutoGenerateColumns设置为False ; 另外就是绑定的模式TwoWay
d.将数据源关联至控件中
this.DataGrid.ItemsSource = stuList; //这边还可以使用DataContext的方法,暂时还没弄懂,后续会有跟进
再看数据库的源数据:
a.先设定访问数据库的参数
public static string sqlcon = "Data Source=****\\SQLEXPRESS;Initial Catalog=*********;Persist Security Info=True;User ID=sa;Password=**********"; //这是数据库的地址
b.打开数据库
SqlConnection conn = new SqlConnection(sqlcon); conn.Open(); //然后是创建数据库链接并打开
c.查询内容
SqlDataAdapter SQLda = new SqlDataAdapter(“select * from book”, conn); DataSet My_Da 9a0d taSet = new DataSet(); SQLda.Fill(My_DataSet, "book"); //然后是数据库查询语句,并且将集合放置在DataSet容器内
d.将内容关联至控件中
DataGrid.ItemsSource = My_DataSet.Tables["book"].DefaultView; //前端的绑定和后台数据显示类似就不多写了,注意的是字段的名称不要出错。但这里面仅仅是显示用。下面分开介绍修改的内容。
2.内容修改—后台源数据
由于使用了TwoWay模式,在DataGrid上面的修改被直接更新:
stuList.Add(new Students() { Id = "4", Name = "shao", Age = "29" }); //新增方法 stuList.RemoveAt(this.DataGrid.SelectedIndex); //删除方法 //实战中后台源数据的使用较少就不多做深入了。下面主要说明数据库源数据的修改
3.内容修改—数据库源数据
a.做一个UpdateDatabase的方法,用于更新修改后的内容
public static void UpdateDatabase(DataTable table) { try { DataBase.getcon();//这边有一个打开数据库链接的部分就省略了 SqlDataAdapter adapter = new SqlDataAdapter("select * from book", DataBase.conn); SqlCommandBuilder cb = new SqlCommandBuilder(adapter);//更改相协调? cb.GetUpdateCommand(); adapter.Update(table);//用于更新---有一个返回int的方法重载。但是值不对。 //table.AcceptChanges();//----这个东西慎用,一旦用了就停止更新。 //上面实现了类似EXCEL一样的,修改完毕就自动更新的机制,这句代码阻止了其发生 } catch (SqlException ex) { MessageBox.Show(ex.Message); table.RejectChanges();//回滚方法 } }
b.放置一个用于确认更新的按钮,添加Click事件
if (DataGrid.ItemsSource != null) { UpdateDatabase((DataGrid.ItemsSource as DataView).Table); } //至此,数据库的更新就完成了,修改,新增,删除,都可以依靠此按钮进行更新
PS:下面介绍一下即刻更新的方法
a.首先需要新增一个Rowchanged方法,这个方法不是DataGrid内的,而是DataRow里面的,需要手动添加。
private void ds_Rowchanged(object sender, DataRowChangeEventArgs e) { //throw new NotImplementedException(); UpdateDatabase(e.Row.Table); }
b.其次在数据关联之前插入此事件
My_DataSet.Tables["book"].RowChanged += new DataRowChangeEventHandler(ds_Rowchanged); DataGrid.ItemsSource = My_DataSet.Tables["book"].DefaultView; //这边要注意的是,至此只能对内容修改进行即刻的更新,如果有新增,也可以更新,但是如果有删除,就无法更新。需要之前的那个更新确认按钮Click事件再次触发才行。具体原因,是因为这个自动更新针对的是Row,而不是DataGrid。
相关文章推荐
- MySQL半同步复制
- redis 学习记录总结(Node.js实战-读书笔记)
- 要慎用mysql的enum字段的原因
- mysql 导入&导出sql文件
- Snail—ORACLE基础之事务学习(五)
- ubuntu下的mysql学习总结
- ubuntu nodejs+mongodb环境配置
- 修改oracle实例名(sid)和数据库名(db_name)
- memcached—关于使用的一个故事
- mysql架构方案
- MySQL相关文章
- mysql 查看最大连接数 设置最大连接数
- MySQL的事务级别测试
- 深入浅出数据仓库中SQL性能优化之Hive篇
- mysql出现:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) 错误
- MySQL高可用架构之MHA
- mysql之修改编码
- SQL Server 2012的安装配置
- MySQL二进制包安装简略过程
- 进击的KFC:SQlite数据库增删改查