从datagrid获取数据时出错

时间:2014-08-22 01:07:42

标签: c# wpf datagrid wpfdatagrid

下面的代码是从数据网格中获取第一列数据,并执行一些字符串操作,但显示错误,

处理了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();
}

1 个答案:

答案 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绑定到该属性。