比较datagrid中同一行上的两个单元格

时间:2013-04-04 13:53:00

标签: c# wpf datagrid

使用C#.NET 4.5,MS visual studio 2012,WPF。

嗨,刚刚让这段代码工作,它基本上是通过行遍历datgrid。

警告他可能会冒犯所有WPF巫师!

public IEnumerable<System.Windows.Controls.DataGridRow> GetDataGridRow(System.Windows.Controls.DataGrid grid)
{
    var itemsource = grid.ItemsSource as System.Collections.IEnumerable;
    paretogrid.UpdateLayout();
    if (null == itemsource) yield return null;
    foreach (var item in itemsource)
    {
        var row = grid.ItemContainerGenerator.ContainerFromItem(item) as DataGridRow; // null?
        if (null != row) yield return row;
    }
}

private void ShowArrows()
{
    var rows = GetDataGridRow(paretogrid); // fetching null?

    foreach (DataGridRow r in rows)
    {
        DataRowView rv = (DataRowView)r.Item;      
    }
}

因此,您可以看到我遍历行。现在我要做的是将列索引2处的单元格值与每个“行”上的列索引4进行比较,然后如果为true或false,则相应地更新列5。我可以遍历可以让我按单元格移动的列,但不是我所追求的那些

foreach (DataGridColumn column in paretogrid.Columns)

它是这样的:

paretogrid.Columns[2].GetCellContent(something here) as textblock;

2 个答案:

答案 0 :(得分:1)

原来我想过这个。这是我的解决方案,

var test1 = paretogrid.Columns[7].GetCellContent(paretogrid.Items[2]) as TextBlock;
int t1convert = Convert.ToInt32(test1.Text);
var test2 =  paretogrid.Columns[8].GetCellContent(paretogrid.Items[2]) as TextBlock;
int t2convert = Convert.ToInt32(test2.Text);

if (t1convert == t2convert)
{
    MessageBox.Show("it worked!");
}

感谢您指出@DJ KRAZE

答案 1 :(得分:1)

请参阅下面的以下说明,它将有助于澄清您看到所见内容的原因

好的,让我更容易理解TextBox,例如,如果我这样做:

var myInt = (int)textBox1.text;

例如,这会编译,因为我暗示我希望myInt存储Int32值,但是:

var myInt = (int)textBox1;

会失败,因为您无法将Object TextBox转换为值,这样可以更容易地查看您的初始错误在何处获得它。

这也与WinForms vs WPF无关,如果基本上我确信我们之前已经做过很多事情,因为我们忘记将.Text添加到结尾当我们想要转换对象所持有的Value而不是对象本身

时的对象