C# 如何从datagrid单元格中获取字符串值?
这是我的第一篇文章。我是C#WPF的新手,所以我的思维可能完全偏离了方向。我基本上是在尝试创建一个数据网格,它的作用类似于电子表格,这样当用户在CellEditEnding上输入一个总和时,它会在CellEditEnding中显示答案,就像excel一样 我有一个6x6的网格绑定到一个空的ObservableCollection,当用户在10*10中键入时,我试图获取他们输入的字符串,将其拆分,然后使用部分创建计算,但此时我无法从单元格中获取字符串。当我直接在代码中设置字符串时,计算就会起作用 任何帮助都将不胜感激。也许有一种更简单的方法可以做到这一点C# 如何从datagrid单元格中获取字符串值?,c#,wpf,C#,Wpf,这是我的第一篇文章。我是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;
}
}
哦,非常感谢。真是太棒了!好几天都在努力让它工作!哦,非常感谢。真是太棒了!好几天都在努力让它工作!