为了让每一行的第一列产生自动编号,我们需要捕获dataGrid1的LoadingRow事件,如
dataGrid1.LoadingRow += new EventHandler<DataGridRowEventArgs>(dataGrid1_LoadingRow);
void dataGrid1_LoadingRow(object sender, DataGridRowEventArgs e) {
int index = e.Row.GetIndex();
var cell = dataGrid1.Columns[0].GetCellContent(e.Row) as TextBlock;
cell.Text = (index + 1).ToString();
}
F5运行后点击增加按钮,你会发现数据源中新增的数据已经加入到DataGrid的新行中,并且第一列自动显示了该行的行号。
现在我们开始解决第二个问题,即从数据源删除数据时自动更新所有行号
现在GridView中再自定义一列,每列的显示一个按钮用来删除该条数据
<data:DataGridTemplateColumn>
<data:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Content="删除" Click="btnDel_Click" />
</DataTemplate>
</data:DataGridTemplateColumn.CellTemplate>
</data:DataGridTemplateColumn>
然后在.cs中处理btnDel_Click事件
private void btnDel_Click(object sender, RoutedEventArgs e) {
var btn = sender as Button;
var index = _personList.IndexOf(btn.DataContext as Person);
_personList.RemoveAt(index);
foreach (var item in dataGrid1.ItemsSource) {
var txtBlock = dataGrid1.Columns[0].GetCellContent(item) as TextBlock;
txtBlock.Text = (DataGridRow.GetRowContainingElement(txtBlock).GetIndex() +
1).ToString();
}
}
dataGrid1.LoadingRow += new EventHandler<DataGridRowEventArgs>(dataGrid1_LoadingRow);
void dataGrid1_LoadingRow(object sender, DataGridRowEventArgs e) {
int index = e.Row.GetIndex();
var cell = dataGrid1.Columns[0].GetCellContent(e.Row) as TextBlock;
cell.Text = (index + 1).ToString();
}
F5运行后点击增加按钮,你会发现数据源中新增的数据已经加入到DataGrid的新行中,并且第一列自动显示了该行的行号。
现在我们开始解决第二个问题,即从数据源删除数据时自动更新所有行号
现在GridView中再自定义一列,每列的显示一个按钮用来删除该条数据
<data:DataGridTemplateColumn>
<data:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Content="删除" Click="btnDel_Click" />
</DataTemplate>
</data:DataGridTemplateColumn.CellTemplate>
</data:DataGridTemplateColumn>
然后在.cs中处理btnDel_Click事件
private void btnDel_Click(object sender, RoutedEventArgs e) {
var btn = sender as Button;
var index = _personList.IndexOf(btn.DataContext as Person);
_personList.RemoveAt(index);
foreach (var item in dataGrid1.ItemsSource) {
var txtBlock = dataGrid1.Columns[0].GetCellContent(item) as TextBlock;
txtBlock.Text = (DataGridRow.GetRowContainingElement(txtBlock).GetIndex() +
1).ToString();
}
}