2

使用 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;
4

2 回答 2

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

于 2013-04-04T14:25:38.757 回答
1

请参阅下面的说明,这将有助于弄清楚为什么您会看到您所看到的

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

var myInt = (int)textBox1.text;

例如,这将编译,因为我暗示我想myInt存储一个Int32值,但是:

var myInt = (int)textBox1;

会失败,因为您无法将Object,转换TextBox为 Value 这样做是否可以更容易地查看您的初始错误是哪里以及您得到它的原因。

WinForms这也与vs如果基本上是一些简单的事情无关WPF,我相信我们中的许多人之前都做过,因为.Text当我们想要转换Value对象持有的而不是对象本身时,我们忘记了追加到对象的末尾

于 2013-04-04T14:28:37.883 回答