下面的代码是从数据网格中获取第一列数据,并执行一些字符串操作,但显示错误,
处理了NullReferenceException 对象引用未设置为对象的实例。
有什么问题? 如果我想在第一列中获取每个数据,该怎么做?
private string getit(DataGrid grid)
{
StringBuilder stringStr = new StringBuilder();
for (int i = 0; i < grid.Items.Count; i++)
{
TextBlock selectTextBlockInCell = grid.Columns[0].GetCellContent(i) as TextBlock;
string inputName = selectTextBlockInCell.Text;
stringStr.Append(@"\pic () at (-0.5,");
stringStr.Append(3 - i);
stringStr.Append(inputName);
stringStr.Append(@"}");
}
return stringStr.ToString();
}
答案 0 :(得分:1)
阅读有关DataGridColumn.GetCellContent()的MSDN文档,尤其是关于应该传递给方法的参数。然后,您将知道它没有接收行索引,但是&#34;数据项由包含目标单元格的行表示&#34; 。
尝试对DataGrid
的基础数据源进行操作,例如:
//cast to correct type
var data = (ObservableCollection<MyClass>)grid.ItemsSource;
StringBuilder stringStr = new StringBuilder();
//loop through your data instead of DataGrid it self
for (int i = 0; i < data.Count; i++)
{
//get the value from correct property of your class model
string inputName = data[i].MyProperty;
//or if you really have to get it from cell content :
//TextBlock selectTextBlockInCell = grid.Columns[0].GetCellContent(data[i]) as TextBlock;
//string inputName = selectTextBlockInCell.Text;
stringStr.Append(@"\pic () at (-0.5,");
stringStr.Append(3 - i);
stringStr.Append(inputName);
stringStr.Append(@"}");
}
return stringStr.ToString();
WPF意味着与数据绑定一起使用,以便我们可以清楚地分离UI和数据(阅读有关MVVM模式)。应用程序逻辑不应该关心UI,因此最好在UI控件上运行。改为对model / viewmodel进行逻辑运算,让数据绑定将model / viewmodel传递给UI / view。
*)从data.ItemsSource
获取数据只是简化的方式,从OP目前开始。最终的方法是拥有一个存储数据的属性,并将ItemsSource
绑定到该属性。