wpf - 如何在 WPF Datagrid 的第一列中显示行号

标签 wpf wpf-controls wpfdatagrid

在搜索时我发现,行号可以轻松设置为 RowHeader:

void datagrid_LoadingRow(object sender, DataGridRowEventArgs e) 
{ 
     e.Row.Header = e.Row.GetIndex(); 
} 

它在 RowHeader 中设置行号。但我想将行号显示到第一列

任何人都可以帮助我如何实现这一目标?谢谢

最佳答案

可能有一种更简单的方法来做到这一点,但我通过使用 DataGridRow 类上的 GetIndex() 方法让它工作。这会将索引返回到数据源,因此可能不是您所追求的。

enter image description here

xaml

  <Window x:Class="WpfApplication1.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:sys="clr-namespace:System;assembly=mscorlib"
            xmlns:local="clr-namespace:WpfApplication1"
            Title="MainWindow" Height="350" Width="525">
        <DataGrid>
            <DataGrid.Columns>
                <DataGridTextColumn Binding="{Binding RelativeSource={RelativeSource AncestorType=DataGridRow}, Converter={local:RowToIndexConverter}}" />
            </DataGrid.Columns>
            <DataGrid.Items>
                <sys:String>a</sys:String>
                <sys:String>b</sys:String>
                <sys:String>c</sys:String>
                <sys:String>d</sys:String>
                <sys:String>e</sys:String>
            </DataGrid.Items>
        </DataGrid>
    </Window>

和转换器。
public class RowToIndexConverter : MarkupExtension, IValueConverter
{
    static RowToIndexConverter converter;

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        DataGridRow row = value as DataGridRow;
        if (row != null)
            return row.GetIndex();
        else
            return -1;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }

    public override object ProvideValue(IServiceProvider serviceProvider)
    {
        if (converter == null) converter = new RowToIndexConverter();
        return converter;
    }

    public RowToIndexConverter()
    {
    }
}

关于wpf - 如何在 WPF Datagrid 的第一列中显示行号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15061013/

相关文章:

c# - 在 WPF 中调用调度程序时出现问题

c# - UserControl 中的 Window.Resources 样式 "could not be resolved"

wpf - 在其他元素后面订购2d/3d对象

.net - 将上下文菜单命令参数绑定(bind)到数据网格属性

c# - WPF - 图像未正确显示的用户控件

c# - 如何在桌面 WPF 应用程序中播放 OGG 声音文件?

c# - 如何在 WPF 中的 Devexpress 工具上使用 Grid inside Grid(嵌套网格)

wpf - DataGrid 从 v. 3.5sp1 (ToolKit) 到 .Net 4.0 的更改

wpf - 如何将文本框添加到 Gridview 的每个标题列并使用文本框过滤该列?

WPF 验证问题 : how to work with validation which involves 2 fields