积极答复者
wpf datagrid如何阻止多个空行

问题
答案
-
首先,你的DataGrid有数据绑定源,其次你的源是可以默认接受一个空的Item加入的,所以你可以无限添加空行。
看我的例子,给新行增加验证,这样子就不能无限添加了。
<Grid> <DataGrid ItemsSource="{Binding}" CanUserAddRows="True" AutoGenerateColumns="False"> <DataGrid.Columns> <DataGridTextColumn Header="Name" Binding="{Binding Name,ValidatesOnDataErrors=True}" Width="*"/> <DataGridTextColumn Header="Age" Binding="{Binding Age,ValidatesOnDataErrors=True}" Width="*"/> <DataGridTextColumn Header="Details" Binding="{Binding Details,ValidatesOnDataErrors=True}" Width="*"/> </DataGrid.Columns> </DataGrid>
C#:
public partial class MainWindow : Window { public ObservableCollection<item> Items { get; set; } public MainWindow() { InitializeComponent(); Items = new ObservableCollection<item>(); for (int i = 0; i < 5; i++) Items.Add(new item() { Name = "Name " + i.ToString(), Age = 20 + i % 4, Details = "Details something..." }); this.DataContext = Items; } } public class item : IDataErrorInfo { public string Name { get; set; } public int Age { get; set; } public string Details { get; set; } public string Error { get { throw new NotImplementedException(); } } public string this[string columnName] { get { if (columnName == "Name") if (string.IsNullOrEmpty(Name)) return "Can not be empty"; if (columnName == "Age") if (Age == 0) return "Can not be 0"; if (columnName == "Details") if (string.IsNullOrEmpty(Details)) return "Can not be empty"; return ""; } } }
Sincerely,
Bob Bao [MSFT]
MSDN Community Support | Feedback to us
Get or Request Code Sample from Microsoft
Please remember to mark the replies as answers if they help and unmark them if they provide no help.
- 已标记为答案 ITKing 2011年6月28日 4:42
全部回复
-
首先,你的DataGrid有数据绑定源,其次你的源是可以默认接受一个空的Item加入的,所以你可以无限添加空行。
看我的例子,给新行增加验证,这样子就不能无限添加了。
<Grid> <DataGrid ItemsSource="{Binding}" CanUserAddRows="True" AutoGenerateColumns="False"> <DataGrid.Columns> <DataGridTextColumn Header="Name" Binding="{Binding Name,ValidatesOnDataErrors=True}" Width="*"/> <DataGridTextColumn Header="Age" Binding="{Binding Age,ValidatesOnDataErrors=True}" Width="*"/> <DataGridTextColumn Header="Details" Binding="{Binding Details,ValidatesOnDataErrors=True}" Width="*"/> </DataGrid.Columns> </DataGrid>
C#:
public partial class MainWindow : Window { public ObservableCollection<item> Items { get; set; } public MainWindow() { InitializeComponent(); Items = new ObservableCollection<item>(); for (int i = 0; i < 5; i++) Items.Add(new item() { Name = "Name " + i.ToString(), Age = 20 + i % 4, Details = "Details something..." }); this.DataContext = Items; } } public class item : IDataErrorInfo { public string Name { get; set; } public int Age { get; set; } public string Details { get; set; } public string Error { get { throw new NotImplementedException(); } } public string this[string columnName] { get { if (columnName == "Name") if (string.IsNullOrEmpty(Name)) return "Can not be empty"; if (columnName == "Age") if (Age == 0) return "Can not be 0"; if (columnName == "Details") if (string.IsNullOrEmpty(Details)) return "Can not be empty"; return ""; } } }
Sincerely,
Bob Bao [MSFT]
MSDN Community Support | Feedback to us
Get or Request Code Sample from Microsoft
Please remember to mark the replies as answers if they help and unmark them if they provide no help.
- 已标记为答案 ITKing 2011年6月28日 4:42