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

C# 比较datagrid中同一行上的两个单元格,c#,wpf,datagrid,C#,Wpf,Datagrid,使用C#.NET 4.5,MS visual studio 2012,WPFs 嗨,这段代码终于开始工作了,它基本上是通过行遍历一个datgrid 警告他可能会冒犯所有的WPF巫师 public IEnumerable<System.Windows.Controls.DataGridRow> GetDataGridRow(System.Windows.Controls.DataGrid grid) { var itemsource = grid.ItemsSource as

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

嗨,这段代码终于开始工作了,它基本上是通过行遍历一个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;      
    }
}
那么它是不是像:

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

结果我想得太多了。这是我的解决方案

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

请参阅下面的解释,它将有助于澄清您为什么看到您所看到的

好的,让我让您更容易理解文本框,例如,如果我这样做了:

var myInt = (int)textBox1.text;
例如,这将编译,因为我暗示我希望
myInt
存储
Int32
值,但是:

var myInt = (int)textBox1;
将失败,因为您无法将
对象
(即
文本框
)转换为值。这样可以更容易地查看初始错误的位置以及获取该错误的原因


这与
WinForms
vs
WPF
也没有任何关系,如果我们想转换对象持有的
值,而不是对象本身的
值时,忘记将
.Text
附加到对象的末尾,我相信我们很多人以前都做过这件简单的事情已经在
行上了
我不明白为什么你不能仅仅通过它的索引来检查
行列[4]的值
你熟悉
快速观察
吗你可以使用
行[rowindex]。列[columnIndex]
来计算数据值顺便说一句,这只是一个伪代码示例是的,我正在使用grid.columns[2].getcellcontent(..)目前为止它可以工作,但转换不起作用,例如,如果我在转换为int 32时比较2个int,它无法将textblock转换为int,因此目前正在尝试找到解决方法。我想ied发布这个问题是为了看看是否有一种我错过的更简单的方法。你需要
转换文本块。Text
而不是对象本身Steve尝试这样做。。另外,你能告诉我你是如何进行转换的吗?我或其他人给你正确的语法会容易得多
+1
用于显示一些积极的效果。另外,我认为您应该分配一个
var
来保存要比较的值,转换,然后分配回TextBlock。Text value
是的,我最初在中有var,然后交换到ints,并尝试在同一行上强制转换,结果发现我有点“邋遢”。所以我把它改回了vars,然后把后面的vars改成int,wseems看起来不错不客气,我给你留了一个解释,这样会更有意义。另外,
+1能够快速理解
我之前解释的内容。完全正确,在过度思考与Winforms相当的WPF时错过了显而易见的内容…我真傻,谢谢DJ!
var myInt = (int)textBox1;