2011-10-05 78 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); 
} 
相关问题