大作业杂谈

关于第二,三,四的四个实验,对于我这种新技能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#如初恋 = =!)

posted @ 2015-05-16 01:44  marsh  阅读(181)  评论(0编辑  收藏  举报