سلام دوستان
من در برنامه ام گرید دارم که به صورت داینامیک از دیتابیس پر می شود.
<DataGrid x:Name="GrdKalaForTest" FontFamily="B Nazanin" FontSize="15" GridLinesVisibility="All" HorizontalGridLinesBrush="#FFCACACA" VerticalGridLinesBrush="#FFCACACA"
VerticalAlignment="Stretch" AlternationCount="1" AlternatingRowBackground="Azure"
Margin="38,58,38,213"
/>
کاربر می تواند روی گرید تغییر ایجاد کند و مثلا اندازه ستون ها را کم و زیاد کند یا روی چند ستون مرتب سازی انجام دهد. این تغییرات به صورت یک فایل xml ذخیره می شود و کاربر بعد از این هروقت وارد فرم می شود تغییرات قبلی از فایل xml خوانده شده و روی گرید اعمال می شود.
grdsort.jpg
مشکل اینجاست که مرتب سازی درست انجام نمی شود. هدر گرید نشان می دهد که مرتب شده اما دیتای درون آن مرتب نمی شود. ستون Producer نزولی مرتب شده اما دیتای آن تغییری نکرده.
به نظر شما مشکل از چیست؟
این کدی است که sort با ان انجام می شود:
public static void RestoreGridSetting(ref DataGrid grd, string FileName)
{
try
{
if (!File.Exists("Setting\\" + FileName + ".xml"))
{
return;
}
XmlDocument xmldoc = new XmlDocument();
XmlNodeList xmlnodeList;
FileStream fs = new FileStream("Setting\\" + FileName + ".xml", FileMode.Open, FileAccess.Read);
xmldoc.Load(fs);
fs.Close();
xmlnodeList = xmldoc.GetElementsByTagName("column");
grd.Items.SortDescriptions.Clear();
foreach (DataGridColumn Column in grd.Columns)
{
XmlNode Column_Node = (from elem in xmlnodeList.Cast<XmlNode>()
where elem.ChildNodes.Item(0).InnerText.Trim() == Column.Header.ToString()
select elem).FirstOrDefault();
if (Column_Node != null)
{
Column.Width = int.Parse(Column_Node.ChildNodes.Item(1).InnerText .Trim());
Column.Header = Column_Node.ChildNodes.Item(2).InnerText.Trim();
int DisplayIndex = int.Parse(Column_Node.ChildNodes.Item(3).InnerText .Trim());
Column.DisplayIndex = DisplayIndex;
bool visible = Convert.ToBoolean(Column_Node.ChildNodes.Item(4).I nnerText.Trim());
Column.Visibility = visible == true ? Visibility.Visible : Visibility.Hidden;
if (Column_Node.ChildNodes.Item(5) != null)
{
Column.SortDirection = Column_Node.ChildNodes.Item(5).InnerText.Trim() == "Ascending" ? ListSortDirection.Ascending : ListSortDirection.Descending;
}
}
grd.Items.Refresh();
}
}
catch (Exception ex)
{
MessageBox.Show("RestoreGridSetting: " + ex.Message);
}
}
ممنون از دوستان