none
wpf datagrid如何阻止多个空行 RRS feed

答案

  • 首先,你的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 { getset; }
        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 { getset; }
        public int Age { getset; }
        public string Details { getset; }
     
        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 "";
          }
        }
      }

     

    下载:https://skydrive.live.com/?cid=51b2fdd068799d15&wa=wsignin1.0#!/?cid=51b2fdd068799d15&sc=documents&uc=1&id=51B2FDD068799D15%21729

     

    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
    2011年6月27日 11:18
    版主

全部回复

  • 首先,你的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 { getset; }
        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 { getset; }
        public int Age { getset; }
        public string Details { getset; }
     
        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 "";
          }
        }
      }

     

    下载:https://skydrive.live.com/?cid=51b2fdd068799d15&wa=wsignin1.0#!/?cid=51b2fdd068799d15&sc=documents&uc=1&id=51B2FDD068799D15%21729

     

    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
    2011年6月27日 11:18
    版主
  • 非常感谢!
    2011年6月28日 4:42