当前位置: 代码迷 >> .NET组件控件 >> 课表WPF制作 学习步骤三
  详细解决方案

课表WPF制作 学习步骤三

热度:91   发布时间:2016-05-04 23:18:54.0
课程表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的属性转换为XmlElement13                     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 [email protected]}" Grid.Row="{Binding [email protected]}">46             <TextBlock Text="{Binding [email protected]}"></TextBlock>47             <TextBlock Text="{Binding [email protected]_name}"></TextBlock>48             <TextBlock Text="{Binding [email protected]_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~~

 

  相关解决方案