powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / не сбрасывается DataGridTextColumn.EditingElementStyle
3 сообщений из 3, страница 1 из 1
не сбрасывается DataGridTextColumn.EditingElementStyle
    #39391276
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет, не могу найти решение следующей проблемы. Мне нужен DataGrid c реализованной логикой по нажатию клавиши Enter в ячейках.
Есть следующие колонки:

Номенклатурный номер

Описание

Кол-во

Столбец с кнопкой "удалить"

Логика следующая - вбиваем номенклатурный номер нажимаем Enter, для него(номера) ищется описание в словаре, если находится, то оно прописывается в колонке "Описание" и курсор переходит в колонку "Кол-во". Там вбиваем количество, и перебрасываем фокус ввода на колонку "Номенклатурный номер" новой строки.
Для этого реализовал свой DataGrid
VB.NET
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
 Public Class PrintNaklDataGrid
        Inherits DataGrid

        Sub New()
        End Sub

        Protected Overrides Sub OnPreviewKeyDown(e As KeyEventArgs)
            MyBase.OnPreviewKeyDown(e)
            If e.Key = 6 Then
                Dim cellInfo As DataGridCellInfo

                If Me.CurrentColumn.DisplayIndex = 1 Then

                    If Not String.IsNullOrWhiteSpace(Me.CurrentItem.descr) AndAlso
                        CType(Me.DataContext, PrintNaklViewModel).check_dublicate_items(Me.CurrentItem.nomenklat_nomer) = 0 Then

                        cellInfo = New DataGridCellInfo(Me.CurrentItem, Me.Columns(3))
                    Else
                        Dim p As PrintNaklViewModel = Me.DataContext
                        p.show_hidden_panel = True
                        p.warning_text = "Заполните номенклатурный номер"
                        e.Handled = True
                        Exit Sub
                    End If
                ElseIf Me.CurrentColumn.DisplayIndex = 3 Then

                    Dim p1 = CType(Me.DataContext, PrintNaklViewModel)
                    p1.check_add_rows()


                    If p1.can_add_rows = 1 Then
                        Dim p As New NaklRowModel
                        Dim dxt = CType(Me.DataContext, PrintNaklViewModel)
                        dxt.add_new_nakl_row(1)
                        cellInfo = New DataGridCellInfo(dxt.NaklRowsSource.Last, Me.Columns(1))
                    Else
                        e.Handled = True
                        Exit Sub
                    End If
                End If

                Me.CurrentCell = cellInfo
                Me.BeginEdit()
                e.Handled = True
            End If
        End Sub
    End Class



C#


Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
public class PrintNaklDataGrid : DataGrid
{
	public PrintNaklDataGrid()
	{
	}

	protected override void OnPreviewKeyDown(KeyEventArgs e)
	{
		base.OnPreviewKeyDown(e);
		if (e.Key == 6) {
			DataGridCellInfo cellInfo = default(DataGridCellInfo);


			if (this.CurrentColumn.DisplayIndex == 1) {

				if (!string.IsNullOrWhiteSpace(this.CurrentItem.descr) && ((PrintNaklViewModel)this.DataContext).check_dublicate_items(this.CurrentItem.nomenklat_nomer) == 0) {
					cellInfo = new DataGridCellInfo(this.CurrentItem, this.Columns(3));
				} else {
					PrintNaklViewModel p = this.DataContext;
					p.show_hidden_panel = true;
					p.warning_text = "Заполните номенклатурный номер";
					e.Handled = true;
					return;
				}

			} else if (this.CurrentColumn.DisplayIndex == 3) {
				dynamic p1 = (PrintNaklViewModel)this.DataContext;
				p1.check_add_rows();


				if (p1.can_add_rows == 1) {
					NaklRowModel p = new NaklRowModel();
					dynamic dxt = (PrintNaklViewModel)this.DataContext;
					dxt.add_new_nakl_row(1);
					cellInfo = new DataGridCellInfo(dxt.NaklRowsSource.Last, this.Columns(1));
				} else {
					e.Handled = true;
					return;
				}
			}

			this.CurrentCell = cellInfo;
			this.BeginEdit();
			e.Handled = true;
		}
	}
}




Раскрашиваю DataGrid следующим образом:

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
  <inputDataGrid:PrintNaklDataGrid x:Name="inputDGW"           
                  ItemsSource="{Binding NaklRowsSource}"  
                  Width="auto"        
                  AutoGenerateColumns="False" 
                  CanUserReorderColumns="False" 
                  CanUserSortColumns="False"
                  CanUserAddRows="False"                        
                  HeadersVisibility="Column"
                  FontSize="20"
                  Height="auto"
                  SelectionUnit="Cell"                  
                  BorderThickness ="0"  
                  Background="Transparent"
                  GridLinesVisibility="None"
                  FontFamily="Tahoma">

                    <inputDataGrid:PrintNaklDataGrid.Resources >
                        <Style TargetType="{x:Type DataGridColumnHeader}">
                            <Setter Property="Background" Value="Transparent"/>
                            <Setter Property="Margin" Value="3,3,0,3"/>
                        <Setter Property="BorderBrush" Value="Blue"/>
                        <Setter Property="BorderThickness" Value="0,3,0,3"/>
                            <Setter Property="ContentTemplate">
                            <Setter.Value >
                                <DataTemplate >
                                    <TextBlock   Foreground="black" TextWrapping="Wrap" 
                                             Text="{Binding Column.Header, RelativeSource={RelativeSource AncestorType={x:Type DataGridColumnHeader}}}"/>
                                </DataTemplate>
                                </Setter.Value>
                            </Setter>
                        </Style>
                        
                    </inputDataGrid:PrintNaklDataGrid.Resources>

                    <inputDataGrid:PrintNaklDataGrid.Columns>
                        <DataGridTextColumn  Header="№" Binding="{Binding n_nomer,UpdateSourceTrigger=PropertyChanged}" IsReadOnly="True">
                        <DataGridTextColumn.ElementStyle>
                            <Style TargetType="TextBlock">
                                <Setter Property="Background" Value="#FF0EDEFF"></Setter>
                            </Style>
                        </DataGridTextColumn.ElementStyle>
                    </DataGridTextColumn>

                    <DataGridTextColumn Header="Номенклатурный номер"    MaxWidth="170"
                        Binding="{Binding nomenklat_nomer,UpdateSourceTrigger=PropertyChanged}" >
                            <DataGridTextColumn.ElementStyle>
                                <Style TargetType="TextBlock">
                                <Setter Property="Background" Value="#FF0EDEFF"/>
                            </Style>
                            </DataGridTextColumn.ElementStyle>
                            <DataGridTextColumn.EditingElementStyle>
                                <Style TargetType="TextBox">
                                <Setter Property="Background" Value="#4C0EDEFF"/>
                                <Setter Property="Foreground" Value="DarkGray"/>  
                                </Style>
                            </DataGridTextColumn.EditingElementStyle>
                        </DataGridTextColumn>


                        <DataGridTextColumn Header="Наименование" MinWidth="380"  Binding="{Binding descr,UpdateSourceTrigger=PropertyChanged}" IsReadOnly="True">
                        <DataGridTextColumn.ElementStyle>
                            <Style TargetType="TextBlock">
                                <Setter Property="Background" Value="#FF0EDEFF"></Setter>
                            </Style>
                        </DataGridTextColumn.ElementStyle>
                        <DataGridTextColumn.EditingElementStyle>
                                <Style TargetType="TextBox">
                                    <Setter Property="Background" Value="#FF2BCB9F"></Setter>
                                </Style>
                            </DataGridTextColumn.EditingElementStyle>
                        </DataGridTextColumn>


                        <DataGridTextColumn Header="Кол-во" Binding="{Binding cnt,UpdateSourceTrigger=PropertyChanged}">
                            <DataGridTextColumn.ElementStyle>
                                <Style TargetType="TextBlock">
                                    <Setter Property="Background" Value="#FF0EDEFF"></Setter>
                                </Style>
                            </DataGridTextColumn.ElementStyle>
                        <DataGridTextColumn.EditingElementStyle>
                            <Style TargetType="TextBox">
                                <Setter Property="Background" Value="#4C0EDEFF"/>
                                <Setter Property="Foreground" Value="DarkGray"/>
                            </Style>
                        </DataGridTextColumn.EditingElementStyle>
                    </DataGridTextColumn>

                    <DataGridTemplateColumn Width="auto" Header="Удалить"  >
                        <DataGridTemplateColumn.CellTemplate  >
                            <DataTemplate >
                                <Border Background="#FF0EDEFF" >
                                    <Button Style="{StaticResource delete_style_button}" />
                                </Border>
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>
                </inputDataGrid:PrintNaklDataGrid.Columns>
                
                </inputDataGrid:PrintNaklDataGrid>


Проблема следующая:
если я нахожусь в ячейке "Номенклатурный номер" при редактировании, отрабатывает стиль
Код: xml
1.
2.
3.
4.
5.
6.
  <DataGridTextColumn.EditingElementStyle>
                                <Style TargetType="TextBox">
                                <Setter Property="Background" Value="#4C0EDEFF"/>
                                <Setter Property="Foreground" Value="DarkGray"/>  
                                </Style>
                            </DataGridTextColumn.EditingElementStyle>


при нажатии на Enter стиль ячейки возвращается на
Код: xml
1.
2.
3.
4.
5.
   <DataGridTextColumn.ElementStyle>
                                <Style TargetType="TextBlock">
                                <Setter Property="Background" Value="#FF0EDEFF"/>
                            </Style>
                            </DataGridTextColumn.ElementStyle>


и фокус попадает на столбец "Кол-во". Вводим кол-во, стиль становится как для редактирования, нажимаем Enter, переходим на новую строку и стиль ячейки кол-во , из которой только что ушли не меняется на DataGridTextColumn.ElementStyle. Если 2 раза кликнуть на эту ячейку, то стиль редактирования пропадает. Причем никак не пойму, почему в столбце "Номенклатурный номер" все отрабатывает нормально, а в "Кол-во" стиль редактирования зависает.
...
Рейтинг: 0 / 0
не сбрасывается DataGridTextColumn.EditingElementStyle
    #39391390
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попробуйте перед тем как после Enter совершить переход на другую ячейку и начать редактирование завершить существующее.
DataGrid вообще глючное говно, вы еще с ним горя хапните, я вам обещаю :)
...
Рейтинг: 0 / 0
не сбрасывается DataGridTextColumn.EditingElementStyle
    #39391758
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtes,
Roman Mejtesпопробуйте перед тем как после Enter совершить переход на другую ячейку и начать редактирование завершить существующее.

при прочтении высветился синий экран.
Куда ж бежать то от этого DataGrida?
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / не сбрасывается DataGridTextColumn.EditingElementStyle
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]