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
答
也许这是你在找什么:
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
目前尚不清楚,你想根据所有4列或只有名称列不同的行?另外,如果你用'Name'“Name”进行过滤,并且案例无关紧要,那么结果将会是单行。按“Name”列排序也是没有意义的,所以你的伪代码只是令人困惑。如果您提供了样本数据和期望的结果,这将会很有帮助。 – 2014-10-09 20:37:07
另外,如果您有重复的行,并且您只想保留每个名称组的一行,您想要哪一行?其他栏可以不同,哪些有优先权? – 2014-10-09 20:41:47
我用我正在做的和问题的实际例子重新输入了问题。希望这可以帮助? – 2014-10-10 19:56:40