的第一列的行數在尋找我發現,行號可以很容易地設置的rowHeader:如何顯示在WPF Datagrid的
void datagrid_LoadingRow(object sender, DataGridRowEventArgs e)
{
e.Row.Header = e.Row.GetIndex();
}
它集的rowHeader行號。但是我想表明的行號到第一列
任何一個可以幫助我,我怎麼能做到這一點?由於
的第一列的行數在尋找我發現,行號可以很容易地設置的rowHeader:如何顯示在WPF Datagrid的
void datagrid_LoadingRow(object sender, DataGridRowEventArgs e)
{
e.Row.Header = e.Row.GetIndex();
}
它集的rowHeader行號。但是我想表明的行號到第一列
任何一個可以幫助我,我怎麼能做到這一點?由於
有可能做到這一點更簡單的方法,但我把它用在DataGridRow類GetIndex()方法來工作。這會將索引返回到數據源,因此可能並不完全是您要的。
的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()
{
}
}
我用Andys例子,但我需要從後面的代碼中使用它,所以他是我的代碼,以防萬一有人正在做同樣的google搜索有點荒蕪。
的C#
DataGrid dataGrid = new DataGrid();
DataGridTextColumn column0 = new DataGridTextColumn();
column0.Header = "#";
Binding bindingColumn0 = new Binding();
bindingColumn0.RelativeSource = new RelativeSource(RelativeSourceMode.FindAncestor, typeof(DataGridRow), 1);
bindingColumn0.Converter = new RowToIndexConvertor();
column0.Binding = bindingColumn0;
dataGrid.Columns.Add(column0);
安迪的轉換器,只是增加return row.GetIndex() - 1;
從1開始計數,而不是0
public class RowToIndexConvertor : MarkupExtension, IValueConverter
{
static RowToIndexConvertor convertor;
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
DataGridRow row = value as DataGridRow;
if (row != null)
{
return row.GetIndex() + 1;
}
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 (convertor == null)
{
convertor = new RowToIndexConvertor();
}
return convertor;
}
public RowToIndexConvertor()
{
}
}
另外不要忘了使用的
using System;
using System.Windows.Data;
using System.Windows.Controls;
using System.Windows.Markup;
我嘗試使用, 空隙datagrid_LoadingRow(對象發件人,DataGridRowEventArgs E) { e.Row.Header = e.Row.GetIndex(); } 它集的rowHeader行號,我需要在列設置。 – Hardik 2013-02-25 06:34:42