C# 从另一个数据网格事件访问数据网格事件参数



我有一些代码循环遍历两个数据网格(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附加到两个数据网格加载行事件。我的问题是 colorWhite 和 colorRed 函数只会为调用数据网格的行着色,而不会为其他数据网格着色。例如,假设事件是通过将一些行加载到 dgFiles1 中来触发的,它只会在 dgFiles1 中将不常见的项目着色为红色,而在 dgFiles2 中永远不会着色,即使它也有不常见的文件。我知道逻辑工作正常,它只是为其他数据网格的行着色的命令,这是不起作用的。

我认为通过将发送器传递给colorRed或colorWhite,它将为数据网格行着色,但它只执行调用数据网格。

我认为

通过将发送者传递给colorRed或colorWhite,它将为数据网格行着色...

那你想错了。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;
}
}

最新更新