我想从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;
}
答案 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
}