当我单击一个单元格时,如何返回WPF Datagrid中项目的列索引 我正在使用Visual Studio 2010 / VB.Net
答案 0 :(得分:9)
您可以直接使用以下代码获取选定的单元格列索引。
int index = datagrid.SelectedCells[0].Column.DisplayIndex;
答案 1 :(得分:5)
您是否尝试在事件点击列索引中使用此功能?
int columnIndex = dataGrid.CurrentColumn.DisplayIndex;
我在MouseDoubleClick事件或PreviewKeyUp中使用此代码并且工作正常。
答案 2 :(得分:3)
DataGridCells
没有Click事件,它们有一个Selected
事件,但是当您单击一个单元格时,通常会为一行中的每个单元格触发该事件。 GotFocus
可能是更好的选择。
e.g。
<DataGrid ItemsSource="{Binding Data}">
<DataGrid.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<EventSetter Event="GotFocus" Handler="CellClick"/>
</Style>
</DataGrid.CellStyle>
</DataGrid>
和
void CellClick(object sender, RoutedEventArgs e)
{
DataGridCell cell = sender as DataGridCell;
MessageBox.Show(cell.Column.DisplayIndex.ToString());
}
DataGridCell.Column.DisplayIndex
似乎返回了一个合适的索引,如果它不够用,你可以使用DataGrid.Columns.IndexOf(DataGridCell.Column)
。
答案 3 :(得分:3)
每个身体都讲述了这个解决方案
Int32 columnIndex = dataGridScannedFiles.SelectedCells[0].Column.DisplayIndex;
并且是的它有效,但是没有人告诉我们必须先为每一列设置显示索引,对于专家来说可能是显而易见的,但是对于初学者来说这是不熟悉的事情
有两种方法可以设置它: -
1)您可以在XAML部分设置..
<DataGridTextColumn Header="Serial No." Width="60" IsReadOnly="True" Binding="{Binding Path=Sno}" DisplayIndex="1"></DataGridTextColumn>
我不知道如何为
等自定义列设置它 <DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox x:Name="ChkItem" IsChecked="{Binding Path=Sno}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
所以我更喜欢另一种方式
2)创建了一个功能
private void SetDisplayIndexforGridViewColumns()
{
Int32 ColumnCount = dt.Columns.Count;
for (int i = 0; i < ColumnCount; i++)
{
dataGridScannedFiles.Columns[i].DisplayIndex = i;
}
}
dt
是我的数据表
我正在为它分配显示索引
现在,如果您使用
Int32 columnIndex = dataGridScannedFiles.SelectedCells[0].Column.DisplayIndex;
然后你肯定会得到索引
答案 4 :(得分:0)
要从DataGrid获取特定列名称的列索引(在使用linq的wpf中)
int index = DataGrid.Columns.Single(c => c.Header.ToString() == "Department").DisplayIndex;