从DataGrid单元格中获取选定的单元格值

时间:2018-08-16 07:51:32

标签: c# wpf datagrid

我想从DataGrid获取选定的单元格值。当我单击一个特定的单元格时,该单元格的值应显示在MessageBox中,但在我的情况下无法执行此操作。异常发生在Datagrid.SelectedCells[0];中。

  

System.ArgumentOutOfRangeException:'指定的参数超出了   有效值范围。参数名称:index'

<DataGrid  DataGridCell.Selected="DataGrid_GotFocus" SelectionUnit="Cell" 
                   SelectionMode="Single" Name="Datagrid"  AutoGenerateColumns="False" 
                   PreviewKeyDown="Datagrid_PreviewKeyDown" 
                   CurrentCellChanged="Datagrid_CurrentCellChanged" SelectionChanged="Datagrid_SelectionChanged">

            <DataGrid.Columns>

                <DataGridTextColumn Header="Code" Width="1*" Binding="{Binding Code}"/>
                <DataGridTextColumn Header="Code" Width="1*" Binding="{Binding Name}"/>
            </DataGrid.Columns>
        </DataGrid>

以及选择更改

 private void Datagrid_CurrentCellChanged(object sender, EventArgs e)
        {
            Datagrid.BeginEdit();

            DataGridCellInfo cell = Datagrid.SelectedCells[0];
            string value =((TextBlock)cell.Column.GetCellContent(cell.Item)).Text;
            MessageBox.Show(value);

        }

Datagrid中的AddValues:

    public FileTab()
            {
                InitializeComponent();

                AddValues();
    }



 void AddValues()
    {
        Datagrid.ItemsSource = null;

        List<Item> list = new List<Item>();
        list.Clear();

        for(int i = 0; i<10; i++)
        {
            string number = i.ToString();
            Item item = new Item()
            {
                Code = number,
                Name = "item "+number
            };
            list.Add(item);
        }


        Datagrid.ItemsSource = list;
    }

2 个答案:

答案 0 :(得分:1)

尝试

  

选定事件

,我想你不会有任何问题。

或者如果您想将其保留在

  

SelectionChanged

您必须知道当DataGrid失去焦点时它将触发。因此,在这种情况下,您拥有

  

DataGrid.SelectedCells = null;

优良作法是测试您的

  

DataGrid.SelectedCells.Coun> 0

然后继续或返回(否则返回)

答案 1 :(得分:1)

将在调用Datagrid_CurrentCellChanged之前先调用Datagrid_SelectedCellsChanged(),然后Datagrid.SelectedCells仍为空。

应使用 Datagrid_SelectedCellsChanged 事件而不是 Datagrid_CurrentCellChanged 事件来检索选定的单元格。

private void Datagrid_SelectedCellsChanged(object sender, SelectedCellsChangedEventArgs e)
{
    Datagrid.BeginEdit();
    DataGridCellInfo cell = Datagrid.SelectedCells[0];
    // Put your code here
}