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

时间:2018-06-23 07:22:22

标签: c# wpf datagrid

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

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

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

for (int i = 0; i < dataGrid.Items.Count; i++)
{
    DataGridRow row = (DataGridRow)dataGrid.ItemContainerGenerator.ContainerFromIndex(i);
    TextBlock cellContent = dataGrid.Columns[0].GetCellContent(row) as TextBlock;
    if (cellContent != null && cellContent.Text.Equals(textBox1.Text))
    {
        object item = dataGrid.Items[i];
        dataGrid.SelectedItem = item;
        dataGrid.ScrollIntoView(item);
        row.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
        break;
    }
}

但是,除非我在XAML中添加DataGrid并将其填满,否则以上代码将不起作用。我发现的大多数解决方案都要求我将其添加到XAML中。认为将其发布为新问题。请帮助我。

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

1 个答案:

答案 0 :(得分:0)

假设您有一个名为DataTable的{​​{1}}。这样只会在“ ID”列中搜索匹配项。

myData

或者您可以使用LINQ:

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