2014-10-09 183 views
0

我試圖創建一個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

回答

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與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