根据搜索值从dataGridView添加特定行

时间:2015-04-21 11:26:49

标签: c# winforms datagridview datatable

以下问题: 我有一个数据表和一个包含特定值的列表。

routIds = col1Items.Distinct().ToList();
String searchValue = String.Empty;        
int rowIndex = -1;

for (int i = 0; i < routIds.Count; i++)
{
    searchValue = routIds[i];

    foreach (DataGridViewRow row in form1.dataGridView5.Rows)
    {
        if (row.Cells[form1.routingIdBox.Text].Value != null) // Need to check for null if new row is exposed
        {
            if (row.Cells[form1.routingIdBox.Text].Value.ToString().Equals(searchValue))
            {
                rowIndex = row.Index;

                foreach (DataGridViewColumn column in form1.dataGridView5.Columns)
                    dtRout.Columns.Add(column.Name);

                for (int k = 0; k < form1.dataGridView5.Rows.Count; k++)
                {
                    dtRout.Rows.Add();
                    for (int j = 0; j < form1.dataGridView5.Columns.Count; j++)
                    {
                        datTable.Rows[k][j] = form1.dataGridView5.Rows[rowIndex].Cells[j].Value;
                    }
                }                    
            }
        }
    }
}

我想从我的datagridview中搜索第一列,并检查它是否与特定值匹配(来自我的数组 - routIds)。如果是,那么我想将整行添加到数据表中,但我不知道它是如何工作的。试过但我得到例外(找不到特定行)。

1 个答案:

答案 0 :(得分:0)

假设您有一个DataTable作为基础DataSource。我不会遍历DataGridViewRows。

DataTable dataSource = dataGridView.DataSource as DataTable; // if it is a DataTable. If not, please specify in your question

// let's make a DataTable, which is a copy of your DataSource
DataTable dataTableFoundIds = new DataTable();
foreach (DataColumn column in dataSource.Columns)
     dataTableFoundIds.Columns.Add(column.ColumnName, column.DataType);

// iterate through your routeIds
foreach (int id in routeIds)
{
    var row = dataSource.AsEnumerable().FirstOrDefault(item => item["col1"].Equals(id)); // take the first row in your DataSource that matches your routeId
    if (row != null)
    {
        dataTableFoundIds.Rows.Add(row.ItemArray); // if we find something, insert the whole row of our source table
    }
}

希望这有帮助!

更新:如果您想查找所有出现次数:

foreach (int id in routeIds)
{
    var rows = dataSource.AsEnumerable().Where(item => item["col1"].Equals(id)); // take all rows in your DataSource that match your routeId
    foreach(var row in rows)
    {
        dataTableFoundIds.Rows.Add(row.ItemArray); // if we find something, insert the whole row of our source table
    }
}