2013-04-04 64 views
2

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

所以,你可以看到我遍歷行。現在我想要做的是將列索引2處的單元格值與每個「行」列索引4進行比較,然後如果true或false,則相應地更新第5列。我可以通過它可以讓我去每個細胞的細胞,但不是列迭代我什麼後e.g

foreach (DataGridColumn column in paretogrid.Columns) 

因此,它是這樣的:

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

Steven如果你已經在'行'我不明白你爲什麼不能檢查行列的值[4],例如它的索引'你熟悉'Quick Watch',你可以使用'row [rowindex] .columns [columnIndex]'來評價數據值,這只是僞代碼的例子 – MethodMan 2013-04-04 14:06:27

+0

是的我正在玩與grid.columns [2] .getcellcontent(..)等遠遠它工作,但轉換不,例如,如果即時通訊比較2整數時,我轉換爲整數32它不能將文本塊轉換爲整數,所以目前試圖看到一種方式。我想過發佈這個問題,看看是否有一種不同的方式,我錯過了這更簡單。 – lemunk 2013-04-04 14:12:27

+0

你需要'轉換TextBlock.Text'而不是對象本身Steve試着這樣做..也可以顯示你如何進行轉換的代碼,對於我或其他人來說,給你正確的語法會更容易。 。+ 1'表示一些積極的努力的方式.. – MethodMan 2013-04-04 14:16:40

回答

1

請參見下面的解釋如下它將幫助清理你爲什麼看到你所看到的

好吧,讓我們我讓你更容易理解文本框,例如,如果我所做的:

var myInt = (int)textBox1.text; 

例如,這將編譯,因爲我是在暗示我要myInt存儲的Int32值,但是:

var myInt = (int)textBox1; 

將失敗,因爲你不能轉換一個Object,這是TextBox的值這並使其更容易看到您最初的錯誤是,爲什麼你都拿到它。

這也有無關WinForms VS WPF如果是因爲我們忘記追加.Text到當我們想在Value的轉換對象的基本結束簡單的東西,我肯定我們許多人都做過對象認爲對象本身

+0

完全正確,錯過了顯而易見的同時想着Winforms的WPF equiv ...愚蠢的我,謝謝DJ! – lemunk 2013-04-04 14:30:19

+0

不是一個問題,我很樂意幫助 – MethodMan 2013-04-04 14:58:50

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

+0

不客氣,我給你留下了一個解釋,這樣如果會更有意義。也因爲能夠快速理解我之前解釋的內容。 – MethodMan 2013-04-04 14:29:35

相關問題