我正在尝试创建一个具有不区分大小写的不同行的DataView。
该项目是XML文件列表,其中名称是由_
个字符分隔的4个用户类型字段的串联。读取它们并使用Split('_')
方法将其放入字符串数组中,并创建初始表。我们想要的是4个单独的列表框,其中包含唯一不区分大小写的文本字符串,因此用户可以选择任何文件组合。用户可以在4个部分中的任何一个或全部上设置排序和过滤。
AAAA_BBBB_CCCC_1.xml
aaaa_bBBB_cccc_2.xml
Aaaa_BBbB_CcCC_3.xml
DDDD_EEEE_FFFF_1.xml
dddd_eeee_ffff_2.xml
DDdD_EeEE_fFFF_3.xml
应该生成包含这些数据的这4个列表框
AAAA BBBB CCCC 1
DDDD EEEE FFFF 2
3
加载第一个列表框的代码
DataView dv = _dtMasterDataBase.DefaultView;
_dtNames = dv.ToTable(true, new[] {Column1, Column2, Column3, Column4});
dv = _dtColumn1.DefaultView;
dv.Sort = ...a string containing 1-4 columns in Asc or Desc
dv.RowFilter = ...a string containing filters for 1-4 columns
_dtColumn1= dv.ToTable(true, new[] {Column1});
DataView dvColumn1 = _dtColumn1.DefaultView
ListBoxColumn1.DataSource = dvColumn1;
ListBoxColumn1.DisplayMember = "Column1";
第一个列表框中显示的内容是
AAAA
AAAA
AAAA级
DDDD
DDDD
答案 0 :(得分:0)
也许这就是你要找的东西:
string[] fileNames = { "AAAA_BBBB_CCCC_1.xml", "aaaa_bBBB_cccc_2.xml", "Aaaa_BBbB_CcCC_3.xml", "DDDD_EEEE_FFFF_1.xml", "dddd_eeee_ffff_2.xml", "DDdD_EeEE_fFFF_3.xml" };
HashSet<string>[] fourFields = new HashSet<string>[4];
string[][] allFields = fileNames
.Select(fn=> Path.GetFileNameWithoutExtension(fn).Split('_'))
.Where(arr => arr.Length == 4)
.ToArray();
for(int i = 0; i < 4; i++)
{
fourFields[i] = new HashSet<string>(StringComparer.InvariantCultureIgnoreCase);
for (int f = 0; f < allFields.Length; f++)
fourFields[i].Add(allFields[f][i]);
}
结果数组包含4个HashSet<string>
:
AAAA DDDD
BBBB EEEE
CCCC FFFF
1 2 3
您还可以使用DataSet
填充DataTables
,这样可以更轻松地将其用作DataSource
:
DataSet ds = new DataSet();
for (int i = 0; i < 4; i++)
{
DataTable dt = new DataTable();
dt.Columns.Add();
HashSet<string> fieldset = new HashSet<string>(StringComparer.InvariantCultureIgnoreCase);
for (int f = 0; f < allFields.Length; f++)
fieldset.Add(allFields[f][i]);
foreach (string field in fieldset)
dt.Rows.Add(field);
ds.Tables.Add(dt);
}
每个表都有一列,如Table1
:
Column1
AAAA
DDDD