2011-10-05 79 views
1

這是我的第一篇文章。我是C#WPF的新手,所以我可能會完全停止思考。我基本上試圖創建一個像電子表格一樣的數據網格,以便當用戶輸入總和時,例如。 10 * 10,在CellEditEnding中,它將在excel中顯示單元格中的答案。如何從datagrid單元格獲取字符串值?

我有一個6x6網格綁定到一個空的ObservableCollection,當用戶輸入10 * 10時,我試圖把它們輸入的字符串分開,然後使用這些部分來創建一個計算,但是在一分鐘我不能從單元格中獲取字符串。計算工程,當我直接在代碼中設置字符串。

任何幫助真的不勝感激。也許有一個更簡單的方法來做到這一點。

public partial class MainWindow : Window 
{ 
    ObservableCollection<DataCell> spreadsheet = new ObservableCollection<DataCell>(); 

    public MainWindow() 
    { 
     //Communal Spreadsheet 
     InitializeComponent(); 

     spreadsheet.Add(new DataCell("", "", "", "", "", "")); 
     spreadsheet.Add(new DataCell("", "", "", "", "", "")); 
     spreadsheet.Add(new DataCell("", "", "", "", "", "")); 
     spreadsheet.Add(new DataCell("", "", "", "", "", "")); 
     spreadsheet.Add(new DataCell("", "", "", "", "", "")); 
     spreadsheet.Add(new DataCell("", "", "", "", "", "")); 
     spreadsheet.Add(new DataCell("", "", "", "", "", "")); 
     spreadsheet.Add(new DataCell("", "", "", "", "", "")); 

     dataGrid2.ItemsSource = spreadsheet; 

} 

private void dataGrid2_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e) 
    { 
     // I want to get the current cell value using the below 
     // string myString = dataGrid1.CurrentItem.ToString(); 

     // the calculation seems to work with this when i pass it to textbox1 and set the myString Variable in the code. 
     string myString = "10 * 10"; 

     string[] parts = myString.Split(' '); 

     int part1 = int.Parse(parts[0]); 
     // string part2 = parts[1]; 
     int part3 = int.Parse(parts[2]); 

     int answer = part1 * part3; 
     string answer2 = answer.ToString(); 

     // dataGrid2.CurrentItem = answer2; 

     // seems to work when i pass to the below textbox instead of back to the cell above 
     textBox1.Text = answer2; 
    } 
} 

}

回答

12

假設您正在編輯一個DataGridTextColumn細胞...

使用 「E」,這是DataGridCellEditEndingEventArgs你的優勢這樣

((TextBox)e.EditingElement).Text 

這會給你鍵入的文本。

+0

Aw謝謝你。工作過一種享受!試圖讓這個工作好幾天! – user980150

+1

不要忘記接受這個答案... –

0

也許是爲了幫助解決我需要弄清楚的問題,我會分享的。對於dataGrid,我需要單元格,列,行和值來做我想做的事情,但我只能得到完整的舊信息和孤立的新單元格值。正因如此,你知道什麼是ControlLimit:

public class ControlLimit 
{ 
    public int ControlLimitId { get; set; } 
    public string ControlLimitDesc { get; set; } 
    public float ControlLimitLow { get; set; } 
    public float ControlLimitHigh { get; set; } 
} 

private void OnEndEdit(object sender, DataGridCellEditEndingEventArgs e) 
{ 
    //Get the cell info, which is old, then assign the new info 
    var cellInfo = (ControlLimit)(((System.Windows.Controls.DataGrid) sender).CurrentCell).Item; 
    var editingElementPram = float.Parse(((System.Windows.Controls.TextBox) e.EditingElement).Text); 
    if (e.Column.Header.ToString() == "Low Limit") 
     cellInfo.ControlLimitLow = editingElementPram; 
    else if (e.Column.Header.ToString() == "High Limit") 
     cellInfo.ControlLimitHigh = editingElementPram; 
    var controlLimitId = ControlLimit.UpdateControlLimitParameters(cellInfo); 
} 
相關問題