Что вам действительно нужно, так это две табличные формы на одной странице, что, к сожалению, невозможно (пока?).Как решить это тогда?Если вам действительно не нужно иметь эту функцию редактирования на одной странице: я бы не стал.Если вы это сделаете (и я имею в виду абсолютно обязательно), то с javascript возникнут сложности.Мой совет: сделайте 2 отчета, предоставьте ссылку для редактирования.Это стандартная функциональность тоже.Конечно, не нужно многократно редактировать, но потом будет легче поддерживать.Что-нибудь нестандартное заставит вас задуматься снова, так что стоит подумать.
Если вам это действительно нужно, я думаю, что это самый удобный способ сделать это: НИКАКОГО возиться в SQL, кроме, может быть, столбцаБольше.Нет необходимости разбираться с объединениями с двойными значениями и упорядочением по некоторым «псевдо» столбцам (потому что вам нужен какой-то способ убедиться, что двойной столбец (столбцы) находятся между определенными значениями ...).
Пример с таблицей EMP
Источник региона:
select
"ROWID",
"EMPNO",
"ENAME",
"JOB",
"DEPTNO"
from "EMP"
where "DEPTNO" IN (10, 20)
order by "DEPTNO"
DEPTNO - скрытый элемент.Порядок по очень важен, так как дальнейшая обработка зависит от определенного порядка строк.Отключите сортировку заголовков столбцов (флажок для сортировки столбцов в атрибутах отчета).
Javascript:
function bind_for_changes(){
//since emp is sorted by deptno, i can loop over the elements in this way
//i also have deptno as a hidden item in the report, so that i can check its value
//since this hidden item is the 4th editable item, its id will be f04_####
//be sure to check the source output if you want to be sure.
//for each input item with name f04 (deptno), do:
//check if its value differs from our stored value.
// if it does, but our var is still -1, then it is only the first record. Do nothing.
// if it does and the var is not -1, then there is a difference between deptnos.
// for example, 10 -> 20.
// this change will be detected on the first row of deptno=20. So the splitter row
// needs to be before this one.
// The input item sits in a TD, the TD in a TR. We need to add a TR element BEFORE
// the current one, so we get the TR and add a new one before it, with a TD in it.
// note the colspan=3, which is the amount of displayed columns. If not sure, check the DOM.
// Or, provide 3 TDs
var deptno = -1;
$("input[name='f04']").each(function(){
if(deptno != $(this).val()){
if(deptno == -1){
deptno = $(this).val(); //first time, first record
//dont change anything
} else {
//a change between deptno's. Add a row after the current one
deptno = $(this).val();
var tr = $(this).parent().parent();
var newtr = $("<tr class='highlight-row'><td colspan=3 class='data'>In between rows!</td></tr>");
tr.before(newtr);
};
};
});
};
Делайте заметки, как я заявляю в комментарии js: вам нужно знатьо том, что страница сгенерирует / сможет прочитать источник / знать DOM.Более или менее редактируемые столбцы могут испортить ваш код!
Например, на моей странице при просмотре исходного кода важна структура строки в отчете:
<tr class="highlight-row">
<td headers="EMPNO" class="data">7782</td>
<td headers="ENAME" class="data">
<label for="f02_0003" class="hideMeButHearMe">Ename</label>
<input type="text" name="f02" size="12" maxlength="2000" value="CLARK" id="f02_0003" />
</td>
<td headers="JOB" class="data">
<label for="f03_0003" class="hideMeButHearMe">Job</label>
<input type="text" name="f03" size="9" maxlength="2000" value="MANAGER" id="f03_0003" />
<input type="hidden" name="f01" value="" id="f01_0003" />
<input type="hidden" name="f04" value="10" id="f04_0003" />
<input type="hidden" id="fcs_0003" name="fcs" value="3C09CABCBA62BE1A064146D162012CEF">
<input type="hidden" id="frowid_0003" name="frowid" value="AAuDjIABFAAAACTAAC" />
<input type="hidden" id="fcud_0003" name="fcud" value="U" />
</td>
</tr>
Обратите внимание на идентификаторы и имена входов, а также на то, где они размещены.
Кроме того, начиная с вершины 4.1 (я полагаю), после элемента таблицы
<input type="hidden" name="fmap" value="CHECK$01" id="fmap_001" />
<input type="hidden" name="fhdr" value="Select Row" id="fhdr_001" />
<input type="hidden" name="fmap" value="ENAME" id="fmap_002" />
<input type="hidden" name="fhdr" value="Ename" id="fhdr_002" />
<input type="hidden" name="fmap" value="JOB" id="fmap_003" />
<input type="hidden" name="fhdr" value="Job" id="fhdr_003" />
<input type="hidden" name="fmap" value="DEPTNO" id="fmap_004" />
<input type="hidden" name="fhdr" value="Deptno" id="fhdr_004" />
есть отображение
Это можно перевести из атрибутов столбца.Но всегда будьте осторожны и перепроверяйте.Это никогда не повредит, и вам все равно нужно знать выходной код.
Однако, если все это звучит слишком продвинуто / сложно, не переживайте!Вы только пожалеете об этом потом. Скорее используйте стандартную функциональность для чего-то вроде этого: 2 обычных отчета со ссылкой на страницу редактирования одной записи!Но если вы должны, на мой взгляд, это самый чистый путь.Вам просто нужно знать, что вы делаете.