WPF DataGridред рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд▓рд┐рдП рд▓рдбрд╝реЛ

рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░!

рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЕрдкрдиреЗ рд▓реЗрдЦ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдореИрдВ рдбреЗрдЯрд╛рдЧреНрд░рд┐рдб рдХреЗ рдПрдХреНрд╕рдПрдордПрд▓ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЛ рдЕрдкрдиреЗ рдХреЛрдб рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдореБрджреНрджреЗ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░реВрдВрдЧрд╛ред рдЗрд╕рдХреЗ рд▓рд┐рдП, рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдХреБрдЫ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рддрддреНрд╡реЛрдВ рдХреА рд╕реВрдЪреА рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдорд╛рди рд▓реЗрдВ рдХрд┐ рддрддреНрд╡ рд╕реНрд╡рдпрдВ рдХреЛрдб рдореЗрдВ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рджрд┐рдЦрддреЗ рд╣реИрдВ:

class Element { public Element (string firstName, string lastName, string phoneNumber, DateTime date) { this.firstName = firstName; this.lastName = lastName; this.phoneNumber = phoneNumber; this.date = date; } public string FirstName { get { return this.firstName; } set { this.firstName = value; } } public string LastName { get { return this.lastName; } set { this.lastName = value; } } public string PhoneNumber { get { return this.phoneNumber; } set { this.phoneNumber = value; } } public DateTime Date { get { return this.date; } set { this.date = value; } } private string firstName; private string lastName; private string phoneNumber; private DateTime date; } 

рддрджрдиреБрд╕рд╛рд░, рдЙрдирдХреА рд╕реВрдЪреА рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА:

 List<Element> elements = new List<Element>(); 

рдЕрдм DataGrid рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред рдЪреВрдВрдХрд┐ рдпрд╣ рд╕рднреА рд╕рдорд╛рди WPF рд╣реИ, рдЖрдк рдЗрд╕реЗ рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рд╕реЗ рдлрд╝реЙрд░реНрдо рдкрд░ рдЦреАрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдЗрдбреАрдИ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдб рд▓рд┐рдЦреЗрдВред

 <DataGrid x:Name="dataGrid" Margin="10,103,0,15" CellEditEnding="dataGrid_CellEditEnding" Grid.RowSpan="2" Grid.ColumnSpan="2" HorizontalAlignment="Left" Width="728" AutoGenerateColumns="False"/> 

рдпрд╣рд╛рдВ, рдореИрдВ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХреЗрд╡рд▓ AutoGenerateColumns = "рдЧрд▓рдд" рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╣рдо рдЯреЗрдмрд▓ рдХреЙрд▓рдо рдХреЛ рд╕реНрд╡рдпрдВ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВрдЧреЗред

рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдмрд╛рдВрдзрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддрддреНрд╡ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд╕рд╛рде рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд╕реНрддрдВрдн рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

 <DataGrid.Columns> <DataGridTextColumn Header="" Binding="{Binding Path=FirstName}"/> <DataGridTextColumn Header="" Binding="{Binding Path=LastName}"/> <DataGridTemplateColumn Header="" SortMemberPath="PhoneNumber"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <TextBox Text="{Binding Path=PhoneNumber}"/> </DataTemplate> </DataGridTemplateColumn.CellTemplate> <DataGridTemplateColumn.CellEditingTemplate> <DataTemplate> <TextBox Text="{Binding Path=PhoneNumber}" /> </DataTemplate> </DataGridTemplateColumn.CellEditingTemplate> </DataGridTemplateColumn> <DataGridTemplateColumn Header="" SortMemberPath="Date"> <DataGridTemplateColumn.CellTemplate> <DataTemplate > <TextBlock Text="{Binding Path=Date, StringFormat='dd/MM/yyyy'}"/> </DataTemplate> </DataGridTemplateColumn.CellTemplate> <DataGridTemplateColumn.CellEditingTemplate> <DataTemplate> <DatePicker SelectedDate="{Binding Date}"/> </DataTemplate> </DataGridTemplateColumn.CellEditingTemplate> </DataGridTemplateColumn> </DataGrid.Columns> 

рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рдХреЙрд▓рдо DataGridTextColumn рдФрд░ DataGridTemplateColumn рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣рд╛рдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдк рд╣рд░ рдЬрдЧрд╣ рдЙрдирдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рд╕рдордЭрдиреЗ рд╡рд╛рд▓реА рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ DataGridTemplateColumn рдХреА рдорджрдж рд╕реЗ рдЖрдк рдХреЛрдИ рднреА рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣реА рд╣реИ, рдЗрд╕ рд╕реНрддрдВрдн рдХреА рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдореЗрдВ рдХрд┐рд╕реА рднреА рдирд┐рдпрдВрддреНрд░рдг (рдмрдЯрди, рдХреИрд▓реЗрдВрдбрд░ рдЖрджрд┐) рдХреЛ рдЬрдЧрд╣ рджреЗрдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рддреАрд╕рд░реЗ рдХреЙрд▓рдо рдореЗрдВ рдПрдХ рдЯреЗрдХреНрд╕реНрдЯрдмреЙрдХреНрд╕ рд╣реИ:

 <DataGridTemplateColumn Header="" SortMemberPath="PhoneNumber"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <TextBox Text="{Binding Path=PhoneNumber}"/> </DataTemplate> </DataGridTemplateColumn.CellTemplate> 

рдорд╣рддреНрд╡рдкреВрд░реНрдг: рд╣реЗрдбрд░ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордд рднреВрд▓рдирд╛, рдХреНрдпреЛрдВрдХрд┐ рдСрдЯреЛ-рд╕рдорд╛рдкрди рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЕрдХреНрд╖рдо рд╣реИред рдФрд░ DataGridTemplateColumn рдХреЗ рд▓рд┐рдП рднреА SortMemberPath рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рддрд╛рдХрд┐ рд╡рд╣ рдпрд╣ рдЬрд╛рди рд╕рдХреЗ рдХрд┐ рдХрд┐рд╕ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдбреЗрдЯрд╛ рд╕реЙрд░реНрдЯ рдХрд░рдирд╛ рд╣реИред

рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред рдпрд╣ рд╕реНрд╡рдпрдВ рдбреЗрдЯрд╛ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рд╣реИред рд╣рдо рдЗрд╕реЗ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдкрде = рдлреЛрдирдирдВрдмрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд░реНрдЧ рд╡рд┐рдзрд┐ рдХрд╛ рдирд╛рдо рд╣реИ рдЬреЛ рдлрд╝реАрд▓реНрдб рдХрд╛ рдорд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИ (рдлреЛрдирдирдВрдмрд░ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдлреЛрдирдирдВрдмрд░, рд╡рд░реНрдЧ рд╡рд┐рд╡рд░рдг рджреЗрдЦреЗрдВ)ред
рдФрд░ рдПрдХ рдмрд╛рддред рд╕рд╛рдорд╛рдиреНрдп рдЕрд╡рд╕реНрдерд╛ (CellTemplate) рдФрд░ рд╕рдВрдкрд╛рджрди рд╕реНрдерд┐рддрд┐ (CellEditingTemplate) рдореЗрдВ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдЯреЗрдореНрдкрд▓реЗрдЯ (DataTemplate) рджрд░реНрдЬ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рдЕрд╡рд╕реНрдерд╛ рдореЗрдВ рд╕реЗрд▓ рдХреЗ рдЪреМрдереЗ рдХреЙрд▓рдо рдореЗрдВ рдпрд╣ рдПрдХ рдЯреЗрдХреНрд╕реНрдЯрдмреЙрдХреНрд╕ рд╣реИ, рдФрд░ рдПрдбрд┐рдЯрд┐рдВрдЧ рд╕реНрдЯреЗрдЯ рдбреЗрдЯрдкрд┐рдХрд░ рдореЗрдВ:

 <DataGridTemplateColumn Header="" SortMemberPath="Date"> <DataGridTemplateColumn.CellTemplate> <DataTemplate > <TextBlock Text="{Binding Path=Date, StringFormat='dd/MM/yyyy'}"/> </DataTemplate> </DataGridTemplateColumn.CellTemplate> <DataGridTemplateColumn.CellEditingTemplate> <DataTemplate> <DatePicker SelectedDate="{Binding Date}"/> </DataTemplate> </DataGridTemplateColumn.CellEditingTemplate> </DataGridTemplateColumn> 

рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рддрд┐рдерд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, рдкрд╛рда рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧрдлрд╛рд░реНрдореЗрдЯ рдЧреБрдг рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдкреНрд░рд╛рд░реВрдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдорд╣реАрдиреЗ рдХреЗ рд╕рд╣реА рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП "рдПрдордПрдо" рдмрдбрд╝рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЕрдм, рд╡рд┐рд╢рд┐рд╖реНрдЯ рдбреЗрдЯрд╛ рдХреЛ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдмрд╛рдБрдзрдиреЗ рдХреЗ рд▓рд┐рдП, C # рдкрд░ рдХреЛрдб рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдБред
рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рд╕рд░рдгреА рднрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЗрд╕реЗ рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:

 dataGrid.ItemsSource = elements; 

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рддрддреНрд╡реЛрдВ рдХреЗ рдХрд┐рд╕реА рднреА рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░, рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдХрд┐рдП рдЧрдП рдХрд┐рд╕реА рднреА рдкрд░рд┐рд╡рд░реНрддрди рд╕реЗ рддрддреНрд╡реЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рддрддреНрд╡реЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛
 dataGrid.Items.Refresh(); 
ред
рдФрд░ C # рдмрдВрдбрд▓ рдХреЗ рдПрдХ рдФрд░ рдЕрдЪреНрдЫреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ - XML, рдореИрдВ рдХреЗрд╡рд▓ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдлрд╝реЛрди рдирдВрдмрд░ рдХрдХреНрд╖реЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреВрдВрдЧрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рддреАрд╕рд░реЗ рдХреЙрд▓рдо рдореЗрдВ рдХреЛрдб рдХрд╛ рдЯреБрдХрдбрд╝рд╛ рдереЛрдбрд╝рд╛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:

 <DataGridTemplateColumn.CellTemplate> <DataTemplate> <TextBox Text="{Binding Path=PhoneNumber}" TextChanged="phN_TextChanged"/> </DataTemplate> </DataGridTemplateColumn.CellTemplate> 

рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЯреЗрдХреНрд╕реНрдЯрдмреЙрдХреНрд╕ рдЯреИрдЧ рдореЗрдВ рдореИрдВрдиреЗ рдЯреЗрдХреНрд╕реНрдЯ рдкрд░рд┐рд╡рд░реНрддрди рдЗрд╡реЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реИрдВрдбрд▓рд░ рд╕реМрдВрдкрд╛ред рдЕрдм рдпрд╣ рдХреЗрд╡рд▓ рдХреЛрдб рдореЗрдВ рдЗрд╕ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдирд╛ рдмрд╛рдХреА рд╣реИ:

  private void phN_TextChanged(object sender, TextChangedEventArgs e) { int result = 0; TextBox txtx = sender as TextBox; if (txtx !=null) { if (!int.TryParse(txtx.Text, out result)) { txtx.Text = txtx.Text.Substring(0, txtx.Text.Length - 1); txtx.CaretIndex = txtx.Text.Length; } } } 

рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рдЬрд╛рдБрдЪ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рднреА рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред

рд╕рднреА рдХреЛ рдЕрдЪреНрдЫреА рд░рд┐рд▓реАрдЬ!

Source: https://habr.com/ru/post/hi484968/


All Articles