編輯DataGrid中的單元格的內容然后保存是非常常用的功能。主要涉及到的方法就是DataGrid的CellEditEnding 和BeginningEdit 。其中BeginningEdit 是當單元格選中后,狀態為可編輯狀態時觸發。CellEditEnding 是在單元格失去焦點后觸發的事件。 對於編輯DataGrid中單元格內容的實現邏輯比較簡單:
1.保存舊的單元格內容。
2.判斷修改后的內容是否符合規范。
3.保存到數據庫。
以下就是簡單的實現邏輯,僅供參考:
前台代碼:
<DataGrid Grid.Row="1" x:Name="dgData"
CellEditEnding="CellEditEnding"
BeginningEdit="BeginningEdit">
<!--需要完善,除了序號,基本完善-->
<DataGrid.Columns>
<DataGridTemplateColumn Header=" 序號" Width="50" MinWidth="10" IsReadOnly="True">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type DataGridRow}}, Path=Header}" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="10,0,0,0"></TextBlock>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Binding="{Binding Name}" Width="*" Header="賬套名稱" IsReadOnly="False"/>
</DataGrid.Columns>
</DataGrid>
后台代碼:
private void CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
{
string newValue = (e.EditingElement as TextBox).Text;
//判斷新名稱和就名稱是否一樣
if (ZTName!=newValue)
{
DataAccess.IAccountDAL iaccount = DALResolver.Instance.Resolve<IAccountDAL>();
int count = iaccount.Count(newValue);
if (count>0)
{
MessageBox.Show("賬套名稱重復,請重新命名!", "警告", MessageBoxButton.OK);
(e.EditingElement as TextBox).Text = ZTName;
return;
}
else
{
int id = (this.dgData.SelectedItem as Founder.Model.Account.ModelAccountInfo).AccountID;
if (!iaccount.UpdateZTName(newValue,id))
{
MessageBox.Show("更新賬套名稱失敗,請重試!","提示",MessageBoxButton.OK);
}
}
//判斷是否重復
}
}
private string ZTName = string.Empty;
private void BeginningEdit(object sender, DataGridBeginningEditEventArgs e)
{
ZTName = (this.dgData.SelectedItem as Founder.Model.Account.ModelAccountInfo).Name;
//MessageBox.Show(ZTName);
}
總結:該功能比較簡單,主要就是熟悉DataGrid的熟悉和方法。在此,僅作記錄。