DataView.ToTable不区分大小写

时间:2014-10-09 20:21:16

标签: c# sorting datatable case-insensitive dataview

我正在尝试创建一个具有不区分大小写的不同行的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

1 个答案:

答案 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