为什么我无法获取Datagrid的单元格值?

时间:2018-01-30 22:04:32

标签: c# wpf datagrid

首先,我是一个编程新手所以请放纵。

我无法从Datagrid获取值。我在MainWindow.XAML中创建了一个:

<DataGrid x:Name="LoadMapGrid"  HorizontalAlignment="Left" Height="264" Margin="0,0,-2,-12" VerticalAlignment="Top" Width="226" AlternatingRowBackground="#FF009999" AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTextColumn x:Name="xLoad" Width="100" Header ="Time,s" Binding="{Binding X_coord, Mode=TwoWay}"/>
        <DataGridTextColumn x:Name="yLoad" Width="100" Header ="Load, MW" Binding="{Binding Y_coord, Mode=TwoWay}"/>
    </DataGrid.Columns>
   </DataGrid>

我正在尝试在按下按钮时显示消息框中单元格的值:

private void SaveButton_Click(object sender, RoutedEventArgs e)
{              
    string str = xLoad.GetCellContent(0).ToString();

    ShowMessage(str);
}

我收到以下错误:

  

SiemensSP.exe中发生了未处理的“System.NullReferenceException”类型异常   附加信息:对象引用未定义到对象实例。

如果我做对了,我应该使用“new”创建一个对象,我不明白,因为我的对象DataGridTextColumn是在我的XAML文件中定义的......

再一次,我仍然不确定OOP是如何工作的,所以请原谅:P。

由于

巴普蒂斯特

1 个答案:

答案 0 :(得分:0)

好的,我没有设法解决错误,但至少我找到了另一种方法。我发布了解决方案,以防有人想要访问DataGrid中的数据,而不是DataGridView中的数据,这更复杂。

为此,我使用了以下链接:https://techiethings.blogspot.ch/2010/05/get-wpf-datagrid-row-and-cell.html

我创建了一个类,我复制了链接中显示的方法:

public static class Class1
{
    public static T GetVisualChild<T>(Visual parent) where T : Visual

    public static DataGridRow GetSelectedRow(this DataGrid grid)

    public static DataGridRow GetRow(this DataGrid grid, int index)

    public static DataGridCell GetCell(this DataGrid grid, DataGridRow row, int column)

    public static DataGridCell GetCell(this DataGrid grid, int row, int column)
}

然后我在Main中使用了以下代码:

private void SaveButton_Click(object sender, RoutedEventArgs e)
    {
        System.Windows.Controls.DataGridCell dataGridCell = null;

        dataGridCell = LoadMapGrid.GetCell(1,1);

        string A =dataGridCell.ToString(); //Return : System.Windows.Controls.DataGridCell: "MyValue"
        Char delimiter = ' ';
        string[] str = new string[1];
        str = A.Split(delimiter);


        System.Windows.MessageBox.Show(str[1]);

    }

如你所见,我无法获得“MyValue”,所以我不得不剪掉字符串。我知道这有点野蛮,但至少它有效。 我愿意接受任何改进建议。

谢谢。