我正在尝试找到一种在所有数据表列中查找字符串的快速方法!跟随不起作用,因为我想在所有列值中搜索。
string str = "%whatever%";
foreach (DataRow row in dataTable.Rows)
foreach (DataColumn col in row.ItemArray)
if (row[col].ToString() == str) return true;
您可以使用 LINQ。它不会更快,因为如果值不存在,您仍然需要查看每个单元格,但它会放在一行中:
return dataTable
.Rows
.Cast<DataRow>()
.Any(r => r.ItemArray.Any(c => c.ToString().Contains("whatever")));
要搜索随机文本并返回一组行,其中至少有一个单元格不区分大小写,请使用以下命令:
var text = "whatever";
return dataTable
.Rows
.Cast<DataRow>()
.Where(r => r.ItemArray.Any(
c => c.ToString().IndexOf(text, StringComparison.OrdinalIgnoreCase) > 0
)).ToArray();
如果你想检查数据表中每一列的每一行,试试这个(它对我有用!)。
DataTable YourTable = new DataTable();
// Fill your DataTable here with whatever you've got.
foreach (DataRow row in YourTable.Rows)
{
foreach (object item in row.ItemArray)
{
//Do what ya gotta do with that information here!
}
}
不要忘记将类型转换object item
为您需要的任何内容(字符串、整数等)。
我已经使用了调试器,它很有魅力。我希望这个帮助能祝你好运!
这可以通过过滤来实现。根据所有列创建(可重用)过滤字符串:
bool UseContains = false;
int colCount = MyDataTable.Columns.Count;
string likeStatement = (UseContains) ? " Like '%{0}%'" : " Like '{0}%'";
for (int i = 0; i < colCount; i++)
{
string colName = MyDataTable.Columns[i].ColumnName;
query.Append(string.Concat("Convert(", colName, ", 'System.String')", likeStatement));
if (i != colCount - 1)
query.Append(" OR ");
}
filterString = query.ToString();
现在您可以获得其中一列与您的搜索字符串匹配的行:
string currFilter = string.Format(filterString, searchText);
DataRow[] tmpRows = MyDataTable.Select(currFilter, somethingToOrderBy);
您也可以使用包含列名称的字符串数组创建搜索例程:
string[] elems = {"GUID", "CODE", "NAME", "DESCRIPTION"};//Names of the columns
foreach(string column in elems)
{
string expression = string.Format("{0} like '%{1}%'",column,
txtSearch.Text.Trim());//Search Expression
DataRow[] row = data.Select(expression);
if(row.Length > 0) {
// Some code here
} else {
// Other code here
}
}
您可以使用 ColmunName 方法获取列的名称。然后,您可以使用它们搜索 DataTable 中的每一列。例如,以下代码将起作用。
string str = "whatever";
foreach (DataRow row in dataTable.Rows)
{
foreach (DataColumn column in dataTable.Columns)
{
if (row[column.ColumnName.ToString()].ToString().Contains(str))
{
return true;
}
}
}
您也可以在数据表上创建过滤器表达式。请参阅此 MSDN文章。在过滤器表达式中使用 like。
string filterExp = "Status = 'Active'";
string sortExp = "City";
DataRow[] drarray;
drarray = dataSet1.Customers.Select(filterExp, sortExp, DataViewRowState.CurrentRows);
for (int i=0; i < drarray.Length; i++)
{
listBox1.Items.Add(drarray[i]["City"].ToString());
}