Несколько вещей: вы можете обработать первый раз через цикл, потому что имя не изменилось бы в первый раз. Вы можете захотеть обработать, когда @ColumnName имеет значение null, потому что это означает, что ваш запрос не возвратил строку, хотя ваш запрос ниже всегда должен возвращать значение.
DECLARE @ColumnCount INT
DECLARE @ColumnCounter INT
DECLARE @ColumnName NVARCHAR(max)
DECLARE @temp varchar(max)
SET @ColumnCounter = 0
SELECT @ColumnCount = Count(c.column_name)
FROM information_schema.columns c
WHERE c.table_name = 'Province'
WHILE @ColumnCount >= @ColumnCounter
BEGIN
SET @ColumnName = NULL
SELECT @ColumnName = c.column_name
FROM information_schema.columns c
WHERE c.table_name = 'Province'
AND c.ordinal_position = @ColumnCounter
IF ( @ColumnName != @temp )
BEGIN
--do something
END
SET @temp = @ColumnName
SET @ColumnCounter = @ColumnCounter + 1
END
вы ссылаетесь на ту же переменную в своем сервисе редактирования через "this.data"
public read2(id) {
this.tempId = id;
if (this.data.length) {
//this.data was already initialized during your .read() initialization
//therefore if(this.data.length) will always be true
//if you really want to maintain this data structure in your servicem
//create a differnt property that holds the 2nd data. e.g. "this.data2"
return super.next(this.data);
}
this.fetch2()
.pipe(
tap(data => {
this.data = data;
})
)
.subscribe(data => {
super.next([data]);
});
}
и ниже - настоящая головная боль, выборка выдает массив, который является правильным, однако выборка 2 выдает единственный объект, но вы ожидаем, что он будет загружен в вашу сетку
private fetch(action: string = '', data?: any): Observable<any[]> {
return this.http
.get(`https://jsonplaceholder.typicode.com/posts`)
.pipe(map(res => <any[]>res));
}
private fetch2(action: string = '', data?: any): Observable<any[]> {
return this.http
.get(`https://jsonplaceholder.typicode.com/posts/${this.tempId}`)
.pipe(map(res => <any[]>res));
}
, поэтому поместите эту строку в ваш ngOninit
this.view = this.editService.pipe(map(data => process(data, this.gridState)),filter(d=>d.total>0),take(1));
, а затем в свой сервис отредактируйте ваш read2
public read2(id) {
this.tempId = id;
this.data = [];
if (this.data.length) {
return super.next(this.data);
}
this.fetch2()
.pipe(
tap(data => {
this.data = data;
})
)
.subscribe(data => {
//super.next(data); remove this line
super.next([data]);
});
}