private void Sort(System.Data.DataSet ds)
{
System.Data.DataRow dr;
for(int i=0; i<ds.Tables[0].Rows.Count;i++)
for(int j=i; j<ds.Tables[0].Rows.Count-1;j++)
if((System.DateTime)ds.Tables[0].Rows[j][0]>(System.DateTime)ds.Tables[0].Rows[j+1][0])
{
dr = ds.Tables[0].Rows[j];
for(int k=0;k<ds.Tables[0].Columns.Count;k++)
{
ds.Tables[0].Columns[k].ReadOnly = false;
ds.Tables[0].Rows[j][k] = ds.Tables[0].Rows[j+1][k];
dr.RejectChanges();
ds.Tables[0].Rows[j+1][k] = dr[k];
}
}
}
Сортировка dataSet
Нужно отсортировать данные в dataSet по значению первого столбца.
Пробую реализовать это так:
Код:
Чтобы поменять строки dataSet местами надо куда-то сохранять одну из них. Я сохраняю в dataRow
Код:
dr = ds.Tables[0].Rows[j];
Но тогда возникает проблема: при изменении dataSet изменяеться также и dataRow, а при отмене изменений в dataRow
Код:
dr.RejectChanges();
отменяються и изменения в dataSet. В результате данные не сортируються.
Как быть?
Код:
struct RowEntry : IComparable<RowEntry>
{
public RowEntry(DataRow row, IComparable key)
{
this.Row = row;
this.Key = key;
}
public DataRow Row;
public IComparable Key;
public int CompareTo(RowEntry other)
{
return Key.CompareTo(other.Key);
}
}
List<RowEntry> list = new List<RowEntry>(table.Rows.Count);
foreach (DataRow row in table.Rows)
{
RowEntry entry = new RowEntry(row, row[0]);
list.Add(entry);
}
list.Sort();
{
public RowEntry(DataRow row, IComparable key)
{
this.Row = row;
this.Key = key;
}
public DataRow Row;
public IComparable Key;
public int CompareTo(RowEntry other)
{
return Key.CompareTo(other.Key);
}
}
List<RowEntry> list = new List<RowEntry>(table.Rows.Count);
foreach (DataRow row in table.Rows)
{
RowEntry entry = new RowEntry(row, row[0]);
list.Add(entry);
}
list.Sort();
Код:
public int CompareTo(object other)
{
RowEntry comparand = (RowEntry) other;
return Key.CompareTo(comparand.Key);
}
{
RowEntry comparand = (RowEntry) other;
return Key.CompareTo(comparand.Key);
}