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);