之前我已经问了一个非完整的问题并得到了答案。但是,我需要一些帮助来完成它。
我在一列中有来自数据库的数据。这些数据的形式如下:
F-T
F-T-O
F-T-O-1
F-T-O-12
F-T-O-13
A-L-7
A-L-73
A-L-74
A-L-741
.
.
.
我需要将这些数据分组成一个下拉(手风琴)问题,其中主手风琴将包含" F-T"和" A-L-7"。点击" F-T"然后会显示内部数据。如果该数据包含子项,则可以将分支转到最后一个子项。组以树型制成。添加另一个字母将属于字母较少的字母:" F-T"包含" F-T-O&#34 ;; " F-T-O"可以包含" F-T-O-1"等等。然而," F-T"不会包含" A-T-L"。
我从前一个问题收到的代码帮助我按照我想要的方式对所有内容进行排序。现在唯一缺少的是对值进行分组。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
namespace ConsoleApplication50
{
class Program
{
static void Main(string[] args)
{
DataTable dt = new DataTable();
dt.Columns.Add("Category", typeof(string));
string[] data = { (data from above as strings) };
foreach (string d in data)
{
dt.Rows.Add(new object[] { d });
}
dt = dt.AsEnumerable().OrderBy(x => new
SortRecord(x,"Category")).CopyToDataTable();
}
}
public class SortRecord : IComparer<SortRecord >, IComparable<SortRecord>
{
string[] rowSplitArray;
int length = 0;
public SortRecord(DataRow x, string name)
{
rowSplitArray = x.Field<string>(name).Split(new char[] { '-' });
length = rowSplitArray.Length;
}
public int Compare(SortRecord rowA, SortRecord rowB)
{
int len = Math.Min(rowA.length, rowB.length);
for (int i = 0; i < len; i++)
{
if (rowA.rowSplitArray[i] != rowB.rowSplitArray[i])
return
rowA.rowSplitArray[i].CompareTo(rowB.rowSplitArray[i]);
}
return rowA.length.CompareTo(rowB.length);
}
public int CompareTo(SortRecord row)
{
return Compare(this, row);
}
}
}
希望你能帮我解决这个问题。花了很多时间,但似乎无法找到方法。
提前致谢!