C#从另一个Datagrid事件访问Datagrid事件参数

时间:2017-08-25 09:46:16

标签: c# wpf datagrid

我有一些代码循环遍历两个Datagrids(dgFiles1和dgFiles2,每一列),并检查每个数据网格中的非常见项目。如果一个项目不在另一个项目中,则应突出显示红色的行。

private void dgFiles_LoadingRow(object sender, DataGridRowEventArgs e)
{
    var itemsSource1 = dgFiles1.ItemsSource as IEnumerable;
            var itemsSource2 = dgFiles2.ItemsSource as IEnumerable;

            if (itemsSource1 != null && itemsSource2 != null)
            {
                foreach (var item1 in itemsSource1)
                {
                    bool exists = false;

                    foreach (var item2 in itemsSource2)
                    {
                        if (item1.ToString() == item2.ToString())
                        {
                            colorWhite(dgFiles2, e);
                            exists = true;
                        }
                    }

                    if (!exists)
                    {
                        colorRed(dgFiles1, e);
                    }

                    exists = false;
                }

                foreach (var item1 in itemsSource2)
                {
                    bool exists = false;

                    foreach (var item2 in itemsSource1)
                    {
                        if (item1.ToString() == item2.ToString())
                        {
                            colorWhite(dgFiles1, e);
                            exists = true;
                        }
                    }

                    if (!exists)
                    {
                        colorRed(dgFiles2, e);
                    }

                    exists = false;
                }
            }
}

private void colorWhite(object sender, DataGridRowEventArgs e)
{
    e.Row.Background = Brushes.White;
}

private void colorRed(object sender, DataGridRowEventArgs e)
{
    e.Row.Background = Brushes.Red;
}

dgFiles_LoadingRow附加到两个datagrids LoadingRows事件。我的问题是colorWhite和colorRed函数只会调用调用数据网格的行,而不会调整其他数据网格的颜色。所以说例如通过将一些行加载到dgFiles1中来触发事件,它只会在dgFiles1中为非常见项目着色,而在dgFiles2中永远不会,即使它也有非常见文件。我知道逻辑工作正常,它只是为其他数据网格的行着色的命令。

我认为通过将发送方传递给colorRed或colorWhite,它会为datagrids行着色,但它只会调用datagrid。

1 个答案:

答案 0 :(得分:1)

  

我认为通过将发送者传递给colorRed或colorWhite,它会为datagrids行着色......

然后你想错了。 DataGridRowEventArgs引用在整个方法中是相同的。如果为dgFiles1中的行引发了事件,则只能引用此特定行。

您应该能够使用ContainerFromItem方法获取项目的相应容器,例如:

foreach (var item2 in itemsSource2)
{
    if (item1.ToString() == item2.ToString())
    {
        var row = dgFiles2.ItemContainerGenerator.ContainerFromItem(item2) as DataGridRow;
        if(row != null)
            row.Background = Brushes.White;
        exists = true;
    }
}