关于第二,三,四的四个实验,对于我这种新技能get很慢的人来说,写起来真的有点吃力。过两天就要交了,我也只是写完了WPF,应用商店和windowsphone都是进行到中间的数据库部分就卡在那里了。(关于我为什么不用sqlite,我只想说,按着网上和其他同学的教程走,到我这里总是缺少引用集,分明添加了引用,目标框架也改过了,就是不行我也真没辙),然后就先写一些目前我搞懂的东西吧。
1.linq to xml
在wpf中,我使用了xml文件来存储用户所录入的数据,当然就要学习如何对xml文件的读写,增删查改了。于是万能的百度有一次给了我答案,http://blog.csdn.net/dyllove98/article/details/8708323 这篇文章中很详细的讲了用不同的方法操作xml文件(很详细),下面我就我用到的东西,总结一下:
1)xdocument
xdocument用以操作xml文档,与xmldocument基本相同,(但我在.net 4.5上,linq to xml 只能用xdocument。。。)
要用这个首先要using system.xml.linq; 然后就可以设变量了~~
1 XDocument xdoc = XDocument.Load("tems.xml"); 2 XElement xroot = new XElement("root"); 3 XElement xitem = new XElement("item"); 4 XElement xname = new XElement("name"); 5 XElement xdate = new XElement("date"); 6 XElement xlast = new XElement("last"); 7 XElement ximportance = new XElement("importance"); 8 9 xname.Value = item.Name; 10 xdate.Value = item.Date; 11 xlast.Value = item.LastDay; 12 ximportance.Value = item.Importance; 13 xitem.Add(xname, xdate, xlast, ximportance); 14 xroot.Add(xitem); 15 xdoc.Add(xroot); 16 xdoc.Save("items.xml");
这样就会在bin的debug下创建一个“item.xml"的文件,然后把item的各种属性信息录入(item是我自己建的一个用以表示用户录入信息的一个类),最后保存。要注意:xDocument.save(string)不能用于应用商店应用,(这也是一度困扰我的问题,最后只要把文件路径的字符串换成流就好了)。
(原博中作者给出了三种写入xml文件的简便方法,我写的这个是最笨的。。。)
2)一些操作
然后是:插入,删除,查找(均为原博得例子)
插入:
1 XElement i = xDoc.Root.Element("FlyInfo").Element("Seat"); //父节点(FlyInfo)下的子节点(Seat) 2 3 //这里给父亲添加个儿子(在末尾添加的) 在之前添加用:AddBeforeSelf 4 i.AddAfterSelf( 5 new XElement("Info","详细信息") //这里Info没有儿子。也就是Info节点没有子节点 6 ); 7 8 xDoc.Save("tableDemo.xml");
删除:
1 //当汤姆退学。需删除元素(课桌) 2 var E18 = from item in xDoc.Descendants("Student") 3 where item.Element("name").Value.Equals("汤姆") //找到汤姆这个学生 4 select item; 5 6 //删除满足条件的节点(同学),最后只剩下id=2和id=3的节点(学生) 以下三句效果相同 7 E18.Remove(); 8 //E8.ToList().ForEach(it => it.Element("name").Parent.Remove()); 9 //E8.ToList().ForEach(it => it.Element("age").Parent.Remove()); 10 xDoc.Save(Console.Out);
修改:
1 //当发现学生Id=1的学生姓名不能是英文。需修改成中文 2 var E7 = from item in xDoc.Descendants("Student") 3 where item.Attribute("Id").Value.Equals("1") 4 select item; 5 6 //找到name元素,修改value。同理。修改age一样。。扩展:SetAttributeValue(name,value)添加属性 7 E7.ToList().ForEach(it => it.Element("name").SetValue("汤姆")); 8 xDoc.Save(Console.Out);
关于具体的内容可以参照上面给的链接,我就是一步步照里面做的。
2.listview的datatemplate
DataTemplate顾名思义,就是数据模板,用来指定数据的表现形式。因为我的应用是做一个日程的天数倒计时提醒,所以需要一条条添加数据,这里就需要用到模板了。下面是我创建的xml 代码:
1 <ListView.ItemTemplate> 2 <DataTemplate> 3 <Grid> 4 <Grid.ColumnDefinitions> 5 <ColumnDefinition Width="{StaticResource col1_width}"/> 6 <ColumnDefinition Width="{StaticResource col2_width}"/> 7 <ColumnDefinition Width="{StaticResource col3_width}"/> 8 <ColumnDefinition Width="{StaticResource col4_width}"/> 9 10 11 </Grid.ColumnDefinitions> 12 <Grid.Resources> 13 <Style TargetType="TextBlock"> 14 <Setter Property="FontFamily" Value="宋体"/> 15 <Setter Property="FontSize" Value="25"/> 16 </Style> 17 </Grid.Resources> 18 <TextBlock x:Name="t1" Grid.Column="0" Text="{Binding Path= Name}" FontFamily="Global User Interface"/> 19 <TextBlock x:Name="t2" Grid.Column="1" Text="{Binding Path= Date}"/> 20 <TextBlock x:Name="t3" Grid.Column="2" Text="{Binding Path= LastDay}"/> 21 <TextBlock x:Name="t4" Grid.Column="3" Text="{Binding Path= Importance}" FontFamily="Global User Interface"/> 22 23 24 25 </Grid> 26 </DataTemplate> 27 </ListView.ItemTemplate>
呃,代码比较乱,其实我就是想说:template就是把每行的格式固定住了,用户不能自己拖拽表格边框,所有的宽度和高度都是确定好的,不能被改变。
It‘s too late at night! 就先写到这里,希望deadline之前能够尽快解决好数据库的问题。(c#虐我千百遍,我待c#如初恋 = =!)