Как я могу получить строковое значение из ячейки сетки данных? - PullRequest
1 голос
/ 05 октября 2011

это мой первый пост.Я новичок в C # WPF, поэтому я могу быть совершенно не в себе.Я в основном пытаюсь создать сетку данных, которая действует как электронная таблица, так что, когда пользователь вводит сумму, например.10 * 10, в CellEditEnding он будет показывать ответ в ячейке, как Excel.

У меня есть сетка 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;
    }
}

}

Ответы [ 2 ]

12 голосов
/ 05 октября 2011

Предполагается, что вы редактируете ячейку DataGridTextColumn ...

Используйте «е», которое DataGridCellEditEndingEventArgs в ваших интересах, как это

 ((TextBox)e.EditingElement).Text

Это даст вам напечатанный текст.

0 голосов
/ 17 января 2017

Может быть, чтобы помочь пробелам в моем решении, мне нужно было разобраться, я поделюсь.Для 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...