C# 如何在不将DataGrid添加到XAML的情况下获取与列值对应的所有行值?

C# 如何在不将DataGrid添加到XAML的情况下获取与列值对应的所有行值?,c#,wpf,datagrid,C#,Wpf,Datagrid,我是C#的新手。我正在尝试构建一个WPF应用程序,它从Excel工作表中获取数据并插入到数据表中 该窗口将有多个带有搜索按钮的文本框。单击搜索按钮时,程序应在ID列中搜索与TextBox中的文本相等的值,然后返回在每个特定的不可编辑TextBox中显示的所有相应行值 由于我不想在UI中使用实际的DataGrid,所以我只创建了一个DataGrid对象并加载了所有数据。在我使用以下源代码之后: for(int i=0;i

我是C#的新手。我正在尝试构建一个WPF应用程序,它从Excel工作表中获取数据并插入到
数据表中

该窗口将有多个带有搜索按钮的文本框。单击搜索按钮时,程序应
ID
列中搜索与
TextBox
中的文本相等的值,然后返回在每个特定的不可编辑
TextBox
中显示的所有相应行值

由于我不想在UI中使用实际的
DataGrid
,所以我只创建了一个
DataGrid
对象并加载了所有数据。在我使用以下源代码之后:

for(int i=0;i
但是,除非我向XAML中添加一个
DataGrid
,并填充它,否则上面的代码不起作用。我找到的大多数解决方案都要求我将其添加到XAML中。考虑将其作为一个新问题发布。请帮帮我


PS:我已经在VB.NET中构建了这个应用程序(不是很难),现在我想转到C#。

让我们假设您有一个名为
myData
DataTable
。这将仅在名为“ID”的列中搜索匹配项

DataRow match = null;
foreach (DataRow row in myData.Rows)
{
    object cell = row["ID"];
    if (cell != null && cell.ToString() == textBox1.Text)
    {
        match = row;
        break;
    }
}
if (match != null)
{
    //You have found a row that contains the search text
    //Do whatever you want with it here
}
else
    //No match found
或者您可以使用LINQ:

DataRow match = myData.AsEnumerable().FirstOrDefault(x => x["ID"] == textBox1.Text);
if (match != null)
    //Here's your row
else
    //No match found

如果您根本不需要GUI部分,请使用
数据表
数据集
。这不需要在XAML中做任何事情。是的,我知道。我确实有一个DataTable,但找不到一个可以完成这项任务的代码。你能帮我吗?你可以简单地迭代
DataTable.Rows
,它的类型是
DataRow
,就像你已经在做的那样。您可以使用
DataRow.ItemArray
对列进行迭代,这是该行中的所有列。一旦找到匹配项,您就已经拥有了该行。您可以向其发布代码吗?帮我开始,谢谢。我要试一试,效果很好。非常感谢:)但它似乎正在整个数据网格中搜索(因为行)。“我的答案已经更新为只搜索“ID”列,因为搜索“ID”列会更快。@Dante123我的答案已经更新为只搜索“ID”列
DataRow match = myData.AsEnumerable().FirstOrDefault(x => x["ID"] == textBox1.Text);
if (match != null)
    //Here's your row
else
    //No match found