C# 如何从datagrid单元格中获取字符串值?

C# 如何从datagrid单元格中获取字符串值?,c#,wpf,C#,Wpf,这是我的第一篇文章。我是C#WPF的新手,所以我的思维可能完全偏离了方向。我基本上是在尝试创建一个数据网格,它的作用类似于电子表格,这样当用户在CellEditEnding上输入一个总和时,它会在CellEditEnding中显示答案,就像excel一样 我有一个6x6的网格绑定到一个空的ObservableCollection,当用户在10*10中键入时,我试图获取他们输入的字符串,将其拆分,然后使用部分创建计算,但此时我无法从单元格中获取字符串。当我直接在代码中设置字符串时,计算就会起作用

这是我的第一篇文章。我是C#WPF的新手,所以我的思维可能完全偏离了方向。我基本上是在尝试创建一个数据网格,它的作用类似于电子表格,这样当用户在CellEditEnding上输入一个总和时,它会在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;
    }
}
公共部分类主窗口:窗口
{
ObservableCollection电子表格=新的ObservableCollection();
公共主窗口()
{
//公用电子表格
初始化组件();
添加(新的数据单元(“,”,“,”,“,”,“,”,”);
添加(新的数据单元(“,”,“,”,“,”,“,”,”);
添加(新的数据单元(“,”,“,”,“,”,“,”,”);
添加(新的数据单元(“,”,“,”,“,”,“,”,”);
添加(新的数据单元(“,”,“,”,“,”,“,”,”);
添加(新的数据单元(“,”,“,”,“,”,“,”,”);
添加(新的数据单元(“,”,“,”,“,”,“,”,”);
添加(新的数据单元(“,”,“,”,“,”,“,”,”);
dataGrid2.ItemsSource=电子表格;
}
私有void dataGrid2_CellEditEnding(对象发送方,DataGridCellEditEndingEventArgs e)
{
//我想用下面的公式得到当前单元格的值
//字符串myString=dataGrid1.CurrentItem.ToString();
//当我将其传递给textbox1并在代码中设置myString变量时,计算似乎可以处理这个问题。
字符串myString=“10*10”;
string[]parts=myString.Split(“”);
int part1=int.Parse(parts[0]);
//字符串part2=零件[1];
int part3=int.Parse(parts[2]);
int-answer=part1*part3;
string answer2=answer.ToString();
//dataGrid2.CurrentItem=answer2;
//当我转到下面的文本框而不是返回到上面的单元格时,似乎工作正常
textBox1.Text=answer2;
}
}

}

假设您正在编辑一个
DataGridTextColumn
单元格

使用“e”,即DataGridCellEditEndingEventArgs这样对您有利

 ((TextBox)e.EditingElement).Text

这将为您提供键入的文本。

假设您正在编辑一个
DataGridTextColumn
单元格

使用“e”,即DataGridCellEditEndingEventArgs这样对您有利

 ((TextBox)e.EditingElement).Text

这将为您提供键入的文本。

也许为了帮助我找出解决方案的差距,我将与大家分享。对于dataGrid,我需要单元格、列、行和值来执行我想要的操作,但我只能获得完整的旧信息和孤立的新单元格值。为了让你知道什么是控制限制:

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);
}

也许为了帮助我找出解决方案中的差距,我将与大家分享。对于dataGrid,我需要单元格、列、行和值来执行我想要的操作,但我只能获得完整的旧信息和孤立的新单元格值。为了让你知道什么是控制限制:

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);
}

为了帮助任何人,我使用WPF DataGridCell中的cell Content属性来获取值。下面是一个单元格为文本类型的示例:

    private void Cell_KeyDown(object sender, KeyEventArgs e)
    {
        DataGridCell cell = sender as DataGridCell;

        if (e.Key == Key.Enter)
        {
            TextBox box = cell.Content as TextBox;
            string strEnteredText = box.Text;
        }        
    }

为了帮助任何人,我使用WPF DataGridCell中的cell Content属性来获取值。下面是一个单元格为文本类型的示例:

    private void Cell_KeyDown(object sender, KeyEventArgs e)
    {
        DataGridCell cell = sender as DataGridCell;

        if (e.Key == Key.Enter)
        {
            TextBox box = cell.Content as TextBox;
            string strEnteredText = box.Text;
        }        
    }

哦,非常感谢。真是太棒了!好几天都在努力让它工作!哦,非常感谢。真是太棒了!好几天都在努力让它工作!