WPF 中DataGrid控件绑定数据的一个例子

XAML 代码如下:

<Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition></ColumnDefinition>
                        <ColumnDefinition Width="30"></ColumnDefinition>
                    </Grid.ColumnDefinitions>
                    <DataGrid Grid.Column="0" Name="datagrid_personal" AutoGenerateColumns="False" CanUserAddRows="False" CanUserDeleteRows="False" CanUserSortColumns="False" SelectionMode="Single" SelectionUnit="CellOrRowHeader" ItemsSource="{Binding}" RowHeaderWidth="10" CanUserResizeRows="False">
                        <DataGrid.Columns>
                            <DataGridTextColumn Width="100" Header="列名" Binding="{Binding Path=Name}" IsReadOnly="True"></DataGridTextColumn>
                            <DataGridTextColumn Width="100" Header="显示名" Binding="{Binding Path=ShowName}"></DataGridTextColumn>
                            <DataGridTextColumn Width="100" Header="宽度" Binding="{Binding Path=Width, ValidatesOnExceptions=True}"></DataGridTextColumn>
                            <DataGridCheckBoxColumn Width="50" Header="隐藏" Binding="{Binding Path=Hide}"></DataGridCheckBoxColumn>
                        </DataGrid.Columns>
                    </DataGrid>
                    <Border Grid.Column="1">
                        <Grid HorizontalAlignment="Center" Width="100">
                            <Grid.RowDefinitions>
                                <RowDefinition Height="80"></RowDefinition>
                                <RowDefinition></RowDefinition>
                            </Grid.RowDefinitions>
                            <Button Grid.Row="0" Name="btn_up" HorizontalAlignment="Center" VerticalAlignment="Center" Background="Transparent" Width="20" Height="30" Click="btn_up_Click">
                                <Canvas>
                                    <Line X1="0" Y1="-5" X2="-5" Y2="5" Stroke="DodgerBlue" StrokeThickness="3"></Line>
                                    <Line X1="0" Y1="-5" X2="5" Y2="5" Stroke="DodgerBlue" StrokeThickness="3"></Line>
                                </Canvas>
                            </Button>
                            <Button Grid.Row="1" Name="btn_down" HorizontalAlignment="Center" VerticalAlignment="Center" Background="Transparent" Width="20" Height="30" Click="btn_down_Click">
                                <Canvas>
                                    <Line X1="-5" Y1="-5" X2="0" Y2="5" Stroke="DodgerBlue" StrokeThickness="3"></Line>
                                    <Line X1="0" Y1="5" X2="5" Y2="-5" Stroke="DodgerBlue" StrokeThickness="3"></Line>
                                </Canvas>
                            </Button>
                        </Grid>
                    </Border>
                </Grid>


 

后台逻辑:

后台首先创建数据源,注意数据源是ObservableCollection<T>类型的集合对象,该类型实现了INortifyCollectionChanged事件,会通知DataGrid刷新。

 ObservableCollection<ColumnSetting> column_settings = new ObservableCollection<ColumnSetting>();
            string ls_infoFile = Environment.CurrentDirectory + "\\" + App.GS_ConfigFileName;
            XmlDocument l_xmlDocument = new XmlDocument();
            l_xmlDocument.Load(ls_infoFile);
            XmlNode node = l_xmlDocument.SelectSingleNode("Configs/RecordConfig");
            XmlNodeList members = node.ChildNodes;
            foreach (XmlNode member in members)
            {
                ColumnSetting column_setting = new ColumnSetting();
                column_setting.Name = member.ChildNodes[0].InnerText;
                column_setting.ShowName = member.ChildNodes[1].InnerText;
                if (member.ChildNodes[2].InnerText == "0")
                {
                    column_setting.Hide = false;
                }
                else
                {
                    column_setting.Hide = true;
                }
                column_setting.Width = Convert.ToInt32(member.ChildNodes[3].InnerText);
                column_settings.Add(column_setting);
            }


 

之后将column_settings赋给DataGrid的ItemsSource即可。

datagrid_personal.ItemsSource =column_settings;


调整行顺序:

private void btn_up_Click(object sender, RoutedEventArgs e)
        {
            Codes.ColumnSetting column_setting = datagrid_personal.SelectedItem as Codes.ColumnSetting;
            if (column_setting != null)
            {
                int index = L_ColumnSettings.IndexOf(column_setting);
                if (index > 0)
                {
                    Codes.ColumnSetting temp = L_ColumnSettings[index - 1];
                    L_ColumnSettings[index - 1] = L_ColumnSettings[index];
                    L_ColumnSettings[index] = temp;
                }
                datagrid_personal.Items.Refresh();
                datagrid_personal.SelectedItem = column_setting;
            }
        }

        private void btn_down_Click(object sender, RoutedEventArgs e)
        {
            Codes.ColumnSetting column_setting = datagrid_personal.SelectedItem as Codes.ColumnSetting;
            if (column_setting != null)
            {
                int index = L_ColumnSettings.IndexOf(column_setting);
                if (index < L_ColumnSettings.Count - 1)
                {
                    Codes.ColumnSetting temp = L_ColumnSettings[index];
                    L_ColumnSettings[index] = L_ColumnSettings[index + 1];
                    L_ColumnSettings[index + 1] = temp;
                }
                datagrid_personal.Items.Refresh();
                datagrid_personal.SelectedItem = column_setting;
            }
        }


最后保存到XML文件:

  string ls_infoFile = Environment.CurrentDirectory + "\\" + App.GS_ConfigFileName;
            XmlDocument l_xmlDocument = new XmlDocument();
            l_xmlDocument.Load(ls_infoFile);
            XmlNode node = l_xmlDocument.SelectSingleNode("Configs/RecordConfig");
            node.RemoveAll();
            foreach (ColumnSetting column_setting in column_settings)
            {
                XmlElement member = l_xmlDocument.CreateElement("Member");
                XmlElement item;
                item = l_xmlDocument.CreateElement("Name");
                item.InnerText = column_setting.Name;
                member.AppendChild(item);
                item = l_xmlDocument.CreateElement("ShowName");
                item.InnerText = column_setting.ShowName;
                member.AppendChild(item);
                item = l_xmlDocument.CreateElement("Hide");
                if (column_setting.Hide)
                {
                    item.InnerText = "1";
                }
                else
                {
                    item.InnerText = "0";
                }
                member.AppendChild(item);
                item = l_xmlDocument.CreateElement("Width");
                item.InnerText = column_setting.Width.ToString();
                member.AppendChild(item);
                node.AppendChild(member);
            }
            l_xmlDocument.Save(ls_infoFile);


 

发布了41 篇原创文章 · 获赞 9 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/jian200801/article/details/7503521