DataView.ToTable不区分大小写

问题描述:

我试图创建一个DataView,它具有不区分大小写的不同行。DataView.ToTable不区分大小写

该项目是一个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

目前尚不清楚,你想根据所有4列或只有名称列不同的行?另外,如果你用'Name'“Name”进行过滤,并且案例无关紧要,那么结果将会是单行。按“Name”列排序也是没有意义的,所以你的伪代码只是令人困惑。如果您提供了样本数据和期望的结果,这将会很有帮助。 – 2014-10-09 20:37:07

+0

另外,如果您有重复的行,并且您只想保留每个名称组的一行,您想要哪一行?其他栏可以不同,哪些有优先权? – 2014-10-09 20:41:47

+0

我用我正在做的和问题的实际例子重新输入了问题。希望这可以帮助? – 2014-10-10 19:56:40

也许这是你在找什么:

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与4 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