课程表WPF制作 学习步骤三

也是由于没用足够时间在查找相关书籍知识上,导致项目进程一直拖延不前,惭愧惭愧;

 

关于之前的展示制作在这里做一个修正:

1.以前的通过进程将两个window联系起来着实麻烦而且是两个项目,无法很好的共用,所以修改为添加新窗口,操作界面如下:

在红色圈部分右键--添加--窗口即可得到一个与MainWindow一个级别的window窗口;

窗口转换可通过.Show()事件实现;

 

接下来就是保存用户操作数据到xml以及查看数据通过xml

我用的是保存和修改xml文件的形式;

 

xml文件如何与xaml之间数据交换绑定我的博客随笔:WPF中后台存储数据方法一XML有一定的解释;

在这里第二步也具体的解释一下:

 
 
一、保存数据到XML文件中
新建一个editwin.xaml的窗口
xaml代码如下:
 1 <Window x:Class="CuirriculumBegin.editwin"
 2         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 3         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 4         Title="editwin" Height="500" Width="400">
 5         <Grid>
 6             <TextBlock HorizontalAlignment="Left" Margin="14,113,0,0" TextWrapping="Wrap" Text="New Class Name:" VerticalAlignment="Top" Height="30" Width="139" RenderTransformOrigin="0.537,0.527" FontFamily="Malgun Gothic" FontSize="16" FontWeight="Bold"/>
 7             <TextBox x:Name="course_name_box" HorizontalAlignment="Left" Height="23" Margin="153,113,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="213" FontSize="16" FontFamily="News706 BT"/>
 8             <TextBlock HorizontalAlignment="Left" Margin="14,282,0,0" TextWrapping="Wrap" Text="Class Time:" VerticalAlignment="Top" Height="30" Width="92" RenderTransformOrigin="0.543,0.696" FontFamily="Malgun Gothic" FontSize="16" FontWeight="Bold"/>
 9 
10             <TextBlock HorizontalAlignment="Left" Margin="83,169,0,0" TextWrapping="Wrap" Text="Teacher:" VerticalAlignment="Top" Height="30" Width="70" RenderTransformOrigin="0.537,0.527" FontFamily="Malgun Gothic" FontSize="16" FontWeight="Bold"/>
11             <TextBox x:Name="teacher_name_box" HorizontalAlignment="Left" Height="23" Margin="153,169,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="213" FontSize="16" FontFamily="News706 BT" />
12             <TextBlock HorizontalAlignment="Left" Margin="101,225,0,0" TextWrapping="Wrap" Text="Place:" VerticalAlignment="Top" Height="30" Width="52" RenderTransformOrigin="0.537,0.527" FontFamily="Malgun Gothic" FontSize="16" FontWeight="Bold"/>
13             <TextBox x:Name="place_box" HorizontalAlignment="Left" Height="23" Margin="153,225,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="213" FontSize="16" FontFamily="News706 BT"/>
14             <Button x:Name="save" Content="Save" HorizontalAlignment="Left" Margin="46,387,0,0" VerticalAlignment="Top" Width="75" Click="save_Click"/>
15             <Button Content="Exit" HorizontalAlignment="Left" Margin="291,387,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click"/>
16             <ComboBox x:Name="combobox1" HorizontalAlignment="Left" Margin="123,282,0,0" VerticalAlignment="Top" Width="90">
17                 <ComboBoxItem>
18                     <TextBlock x:Name="one">星期一</TextBlock>
19                 </ComboBoxItem>
20                 <ComboBoxItem>
21                     <TextBlock x:Name="two">星期二</TextBlock>
22                 </ComboBoxItem>
23                 <ComboBoxItem>
24                     <TextBlock x:Name="three">星期三</TextBlock>
25                 </ComboBoxItem>
26                 <ComboBoxItem>
27                     <TextBlock x:Name="four">星期四</TextBlock>
28                 </ComboBoxItem>
29                 <ComboBoxItem>
30                     <TextBlock x:Name="five">星期五</TextBlock>
31                 </ComboBoxItem>
32                 <ComboBoxItem>
33                     <TextBlock x:Name="six">星期六</TextBlock>
34                 </ComboBoxItem>
35                 <ComboBoxItem>
36                     <TextBlock x:Name="seven">星期日</TextBlock>
37                 </ComboBoxItem>
38             </ComboBox>
39             <ComboBox x:Name="combobox2" HorizontalAlignment="Left" Margin="241,282,0,0" VerticalAlignment="Top" Width="125">
40                 <ComboBoxItem>
41                     <TextBlock x:Name="time1">上午第一节课</TextBlock>
42                 </ComboBoxItem>
43                 <ComboBoxItem>
44                     <TextBlock x:Name="time2">上午第二节课</TextBlock>
45                 </ComboBoxItem>
46                 <ComboBoxItem x:Name="time3">
47                     <TextBlock>上午第三节课</TextBlock>
48                 </ComboBoxItem>
49                 <ComboBoxItem x:Name="time4">
50                     <TextBlock>上午第四节课</TextBlock>
51                 </ComboBoxItem>
52                 <ComboBoxItem x:Name="time5">
53                     <TextBlock>下午第一节课</TextBlock>
54                 </ComboBoxItem>
55                 <ComboBoxItem>
56                     <TextBlock x:Name="time6">下午第二节课</TextBlock>
57                 </ComboBoxItem>
58                 <ComboBoxItem>
59                     <TextBlock x:Name="time7">下午第三节课</TextBlock>
60                 </ComboBoxItem>
61                 <ComboBoxItem>
62                     <TextBlock x:Name="time8">下午第四节课</TextBlock>
63                 </ComboBoxItem>
64                 <ComboBoxItem>
65                     <TextBlock x:Name="time9">晚上</TextBlock>
66                 </ComboBoxItem>
67             </ComboBox>
68             <Button Content="DeleteALL" HorizontalAlignment="Left" Margin="165,387,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click"/>
69         </Grid>
70 </Window>

这是一个简单的对话框界面;

具体的后台程序数据处理代码如下:
 
创建XML:
 1  public void CreateXMLDocument()
 2         {
 3             XmlDocument xmlDoc = new XmlDocument();
 4 
 5             //加入XML的声明段落,<?xml version="1.0" encoding="gb2312"?>
 6             XmlDeclaration xmlDeclar;
 7             xmlDeclar = xmlDoc.CreateXmlDeclaration("1.0", "gb2312", null);
 8             xmlDoc.AppendChild(xmlDeclar);
 9 
10             XmlElement xmlElement = xmlDoc.CreateElement("", "Courses", "");
11             xmlDoc.AppendChild(xmlElement);
12 
13             //添加节点
14             XmlNode root = xmlDoc.SelectSingleNode("Courses");
15             xmlDoc.Save("../../Courses.xml");//保存的路径
16         }

 

添加节点到已有xml:

 1 public void addtoxml(string teacher_name, string course_name, string place, string timerow, string timecol)
 2         {
 3             XmlDocument xmlDoc = new XmlDocument();
 4             xmlDoc.Load("../../Courses.xml");//找到xml文件
 5             XmlNode root = xmlDoc.SelectSingleNode("Courses");
 6             XmlElement xe1 = xmlDoc.CreateElement("course");
 7             xe1.SetAttribute("teacher_name", teacher_name);
 8             xe1.SetAttribute("course_name", course_name);
 9             xe1.SetAttribute("place", place);
10             xe1.SetAttribute("timerow", timerow);
11             xe1.SetAttribute("timecol", timecol);
12             root.AppendChild(xe1);
13             xmlDoc.Save("../../Courses.xml");
14         }

删除xml节点:

 1 public void DeleteNode()
 2         {
 3             XmlDocument xmlDocument = new XmlDocument();
 4             xmlDocument.Load("../../Courses.xml");
 5 
 6             XmlNodeList xnl = xmlDocument.SelectSingleNode("Courses").ChildNodes;
 7 
 8             foreach (XmlNode xn in xnl)
 9             {
10                 if (xn.Name == "course")
11                 {
12                     XmlElement xe = (XmlElement)xn;//将xn的属性转换为XmlElement
13                     xe.RemoveAttribute("teacher_name");
14                     xe.RemoveAttribute("course_name");
15                     xe.RemoveAttribute("place");
16                     xe.RemoveAttribute("timerow");
17                     xe.RemoveAttribute("timecol");
18                 }
19             }
20             xmlDocument.Save("../../Courses.xml");
21         }

 具体的操作解释见博客:http://www.jb51.net/article/56289.htm

 

在我的save按钮中的点击事件中添加如下代码即可:

 1  private void save_Click(object sender, RoutedEventArgs e)
 2         {
 3             CreateXMLDocument();
 4             string timerow = "0", timecol = "0";
 5             switch (combobox1.Text)
 6             {
 7                 case "星期一": timecol = "1"; break;
 8                 case "星期二": timecol = "2"; break;
 9                 case "星期三": timecol = "3"; break;
10                 case "星期四": timecol = "4"; break;
11                 case "星期五": timecol = "5"; break;
12                 case "星期六": timecol = "6"; break;
13                 case "星期日": timecol = "7"; break;
14                 default: MessageBox.Show("非法输入!"); break;
15             }
16             switch (combobox2.Text)
17             {
18                 case "上午第一节课": timerow = "1"; break;
19                 case "上午第二节课": timerow = "2"; break;
20                 case "上午第三节课": timerow = "3"; break;
21                 case "上午第四节课": timerow = "4"; break;
22                 case "下午第一节课": timerow = "5"; break;
23                 case "下午第二节课": timerow = "6"; break;
24                 case "下午第三节课": timerow = "7"; break;
25                 case "下午第四节课": timerow = "8"; break;
26                 case "晚上": timerow = "9"; break;
27                 default: MessageBox.Show("非法输入!"); break;
28             }
29             addtoxml(teacher_name_box.Text, course_name_box.Text, place_box.Text, timerow, timecol);
30         }

我创建了三个窗口:

一个是MainWindow就是我的母体窗口也就是我在课程表WPF制作 学习步骤二中的窗口;

一个是editwin窗口就是上面的窗口;

一个是Window1窗口,就是中的课程表WPF制作 学习步骤一主界面

 

 

二、XAML与XML的数据绑定

具体的XML与XAML数据绑定是在我的Window1窗口中实现的,也就是说主界面需要与数据进行绑定,代码如下:

 1 <Window x:Class="CuirriculumBegin.window1"
 2         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 3         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 4         Title="window1" WindowState="Maximized">
 5     <Window.Resources>
 6         <XmlDataProvider x:Key="course-info" Source="Courses.xml" XPath="/Courses/*"></XmlDataProvider>
 7     </Window.Resources>
 8     <Grid>
 9         <Grid DataContext="{Binding Source={StaticResource course-info}}">
10             <Grid.RowDefinitions >
11                 <RowDefinition Height="90"></RowDefinition>
12                 <RowDefinition></RowDefinition>
13                 <RowDefinition></RowDefinition>
14                 <RowDefinition></RowDefinition>
15                 <RowDefinition></RowDefinition>
16                 <RowDefinition></RowDefinition>
17                 <RowDefinition Height="40"></RowDefinition>
18             </Grid.RowDefinitions>
19             <Grid.ColumnDefinitions>
20                 <ColumnDefinition Width="100"></ColumnDefinition>
21                 <ColumnDefinition></ColumnDefinition>
22                 <ColumnDefinition></ColumnDefinition>
23                 <ColumnDefinition></ColumnDefinition>
24                 <ColumnDefinition></ColumnDefinition>
25                 <ColumnDefinition></ColumnDefinition>
26                 <ColumnDefinition></ColumnDefinition>
27                 <ColumnDefinition></ColumnDefinition>
28             </Grid.ColumnDefinitions>
29             <TextBlock Grid.Row="0" Grid.Column="1" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="30" Foreground="#FFBD1096">星期一</TextBlock>
30             <TextBlock Grid.Row="0" Grid.Column="2" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="30" Foreground="#FFBD1096">星期二</TextBlock>
31             <TextBlock Grid.Row="0" Grid.Column="3" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="30" Foreground="#FFBD1096">星期三</TextBlock>
32             <TextBlock Grid.Row="0" Grid.Column="4" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="30" Foreground="#FFBD1096">星期四</TextBlock>
33             <TextBlock Grid.Row="0" Grid.Column="5" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="30" Foreground="#FFBD1096">星期五</TextBlock>
34             <TextBlock Grid.Row="0" Grid.Column="6" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="30" Foreground="#FFBD1096">星期六</TextBlock>
35             <TextBlock Grid.Row="0" Grid.Column="7" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="30" Foreground="#FFBD1096">星期日</TextBlock>
36             <TextBlock Grid.Row="0" Grid.Column="0" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="20">时间段</TextBlock>
37             <TextBlock Grid.Row="1" Grid.Column="0" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="20" Text=" 8:00&#x0a;  --  &#x0a; 9:35"></TextBlock>
38             <TextBlock Grid.Row="2" Grid.Column="0" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="20" Text=" 9:55&#x0a;  --  &#x0a;11:30"></TextBlock>
39             <TextBlock Grid.Row="3" Grid.Column="0" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="20" Text="14:00&#x0a;  --  &#x0a;15:35"></TextBlock>
40             <TextBlock Grid.Row="4" Grid.Column="0" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="20" Text="15:55&#x0a;  --  &#x0a;17:30"></TextBlock>
41             <TextBlock Grid.Row="5" Grid.Column="0" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="30" Text="晚上"></TextBlock>
42             <Image Source="Resources\1.jpeg" Grid.ColumnSpan="8" Grid.RowSpan="7" Opacity="0.4" Stretch="Fill"/>
43             <Button x:Name="edit_btn" Grid.Column="2" Grid.Row="6" Margin="0,0,5,10" HorizontalAlignment="Right" Width="110" RenderTransformOrigin="0.511,0.067" Content="Edit" IsCancel="True" BorderBrush="#FF1C84EC" Background="White" Opacity="0.5" Foreground="#FFF50808" OpacityMask="#FFF7F7F7" FontFamily="Simplified Arabic" FontSize="16" Grid.ColumnSpan="2" Click="edit_btn_Click"/>
44             <Button x:Name="save_btn" Grid.Column="4" Grid.Row="6" Margin="0,0,79,10" HorizontalAlignment="Right" Width="110" RenderTransformOrigin="0.511,0.067" Content="Save" IsCancel="True" BorderBrush="#FF1C84EC" Background="White" Opacity="0.5" Foreground="#FFF50808" OpacityMask="#FFF7F7F7" FontFamily="Simplified Arabic" FontSize="16" Grid.ColumnSpan="2" Click="save_btn_Click"/>
45             <StackPanel Grid.Column="{Binding XPath=@timecol}" Grid.Row="{Binding XPath=@timerow}">
46             <TextBlock Text="{Binding XPath=@place}"></TextBlock>
47             <TextBlock Text="{Binding XPath=@course_name}"></TextBlock>
48             <TextBlock Text="{Binding XPath=@teacher_name}"></TextBlock>
49             </StackPanel>
50         </Grid>
51     </Grid>
52 </Window>

 

关于XML与XAML交换的具体解释可详细见参考博客:http://blog.sina.com.cn/s/blog_3d6eb75d0100mqtl.html

 

这样大体的成型框架就实现了,操作:

点击Save按钮在Window1中显示如下:

 

那么问题来了:为什么在设计器里面xaml显示出来了数据而在运行后显示却没有???

运行后如下:

还是要继续学习。。。。。。。

 Over~~

 

posted @ 2015-05-09 22:09  入世未深  阅读(730)  评论(0编辑  收藏  举报