Вы можете удалить «top» из thead tr.second th, thead tr.second td и добавить jquery для получения и установки высоты второго заголовка
$(document).ready(function() {
var firstheight = $('.first').height();
$("thead tr.second th, thead tr.second td").css("top", firstheight)
});
table {
height: 100%;
border-collapse: collapse;
width: 100%;
margin: 10px;
font-size: 0.8em;
}
thead tr.first th, thead tr.first td {
position: sticky;
position: -webkit-sticky; /* Safari */
top: 0;
background: #eee;
}
thead tr.second th, thead tr.second td {
position: sticky;
position: -webkit-sticky; /* Safari */
background: #eee;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table border="1px">
<thead>
<tr class="first">
<td rowspan="2">Item No</td>
<th colspan="2">Store ABC</th>
<th colspan="2">Store DEF</th>
</tr>
<tr class="second">
<th>Baskets</th>
<th>Customers</th>
<th>Baskets</th>
<th>Customers</th>
</tr>
</thead>
<tbody>
<tr>
<th>123</th>
<td>345</td>
<td>345</td>
<td>345</td>
<td>345</td>
</tr>
<tr>
<th>123</th>
<td>345</td>
<td>345</td>
<td>345</td>
<td>345</td>
</tr>
<tr>
<th>123</th>
<td>345</td>
<td>345</td>
<td>345</td>
<td>345</td>
</tr>
<tr>
<th>123</th>
<td>345</td>
<td>345</td>
<td>345</td>
<td>345</td>
</tr>
<tr>
<th>123</th>
<td>345</td>
<td>345</td>
<td>345</td>
<td>345</td>
</tr>
<tr>
<th>123</th>
<td>345</td>
<td>345</td>
<td>345</td>
<td>345</td>
</tr>
<tr>
<th>123</th>
<td>345</td>
<td>345</td>
<td>345</td>
<td>345</td>
</tr>
<tr>
<th>123</th>
<td>345</td>
<td>345</td>
<td>345</td>
<td>345</td>
</tr>
<tr>
<th>123</th>
<td>345</td>
<td>345</td>
<td>345</td>
<td>345</td>
</tr>
<tr>
<th>123</th>
<td>345</td>
<td>345</td>
<td>345</td>
<td>345</td>
</tr>
<tr>
<th>123</th>
<td>345</td>
<td>345</td>
<td>345</td>
<td>345</td>
</tr>
<tr>
<th>123</th>
<td>345</td>
<td>345</td>
<td>345</td>
<td>345</td>
</tr>
<tr>
<th>123</th>
<td>345</td>
<td>345</td>
<td>345</td>
<td>345</td>
</tr>
<tr>
<th>123</th>
<td>345</td>
<td>345</td>
<td>345</td>
<td>345</td>
</tr>
<tr>
<th>123</th>
<td>345</td>
<td>345</td>
<td>345</td>
<td>345</td>
</tr>
<tr>
<th>123</th>
<td>345</td>
<td>345</td>
<td>345</td>
<td>345</td>
</tr>
<tr>
<th>123</th>
<td>345</td>
<td>345</td>
<td>345</td>
<td>345</td>
</tr>
<tr>
<th>123</th>
<td>345</td>
<td>345</td>
<td>345</td>
<td>345</td>
</tr>
<tr>
<th>123</th>
<td>345</td>
<td>345</td>
<td>345</td>
<td>345</td>
</tr>
<tr>
<th>123</th>
<td>345</td>
<td>345</td>
<td>345</td>
<td>345</td>
</tr>
<tr>
<th>123</th>
<td>345</td>
<td>345</td>
<td>345</td>
<td>345</td>
</tr>
<tr>
<th>123</th>
<td>345</td>
<td>345</td>
<td>345</td>
<td>345</td>
</tr>
<tr>
<th>123</th>
<td>345</td>
<td>345</td>
<td>345</td>
<td>345</td>
</tr>
<tr>
<th>123</th>
<td>345</td>
<td>345</td>
<td>345</td>
<td>345</td>
</tr>
<tr>
<th>123</th>
<td>345</td>
<td>345</td>
<td>345</td>
<td>345</td>
</tr>
<tr>
<th>123</th>
<td>345</td>
<td>345</td>
<td>345</td>
<td>345</td>
</tr>
<tr>
<th>123</th>
<td>345</td>
<td>345</td>
<td>345</td>
<td>345</td>
</tr>
<tr>
<th>123</th>
<td>345</td>
<td>345</td>
<td>345</td>
<td>345</td>
</tr>
<tr>
<th>123</th>
<td>345</td>
<td>345</td>
<td>345</td>
<td>345</td>
</tr>
<tr>
<th>123</th>
<td>345</td>
<td>345</td>
<td>345</td>
<td>345</td>
</tr>
<tr>
<th>123</th>
<td>345</td>
<td>345</td>
<td>345</td>
<td>345</td>
</tr>
<tr>
<th>123</th>
<td>345</td>
<td>345</td>
<td>345</td>
<td>345</td>
</tr>
<tr>
<th>123</th>
<td>345</td>
<td>345</td>
<td>345</td>
<td>345</td>
</tr>
<tr>
<th>123</th>
<td>345</td>
<td>345</td>
<td>345</td>
<td>345</td>
</tr>
<tr>
<th>123</th>
<td>345</td>
<td>345</td>
<td>345</td>
<td>345</td>
</tr>
<tr>
<th>123</th>
<td>345</td>
<td>345</td>
<td>345</td>
<td>345</td>
</tr>
<tr>
<th>123</th>
<td>345</td>
<td>345</td>
<td>345</td>
<td>345</td>
</tr>
<tr>
<th>123</th>
<td>345</td>
<td>345</td>
<td>345</td>
<td>345</td>
</tr>
<tr>
<th>123</th>
<td>345</td>
<td>345</td>
<td>345</td>
<td>345</td>
</tr>
<tr>
<th>123</th>
<td>345</td>
<td>345</td>
<td>345</td>
<td>345</td>
</tr>
<tr>
<th>123</th>
<td>345</td>
<td>345</td>
<td>345</td>
<td>345</td>
</tr>
<tr>
<th>123</th>
<td>345</td>
<td>345</td>
<td>345</td>
<td>345</td>
</tr>
<tr>
<th>123</th>
<td>345</td>
<td>345</td>
<td>345</td>
<td>345</td>
</tr>
</tbody>
</table>
Состояние отображения включено?
Править: Возможно, необходимо пересмотреть переопределение функции рендеринга
protected override void RenderContents(HtmlTextWriter output)
{
ddlCountries.RenderControl(output);
ddlStates.RenderControl(output);
}
и вместо этого добавьте dropdownlists к управлению и представьте управление с помощью RenderContents по умолчанию.
Править: См. ответ от Dennis, на которого я сослался в моем предыдущем комментарии:
Controls.Add ( ddlCountries );
Controls.Add ( ddlStates );
Я не вижу, что Вы добавляете эти средства управления к иерархии управления. Попробуйте:
Controls.Add ( ddlCountries );
Controls.Add ( ddlStates );
События не будут вызваны, если управление не будет частью иерархии управления.
Необходимо установить AutoPostBack
к истинному для Страны DropDownList
.
protected override void OnLoad(EventArgs e)
{
// base stuff
ddlCountries.AutoPostBack = true;
// other stuff
}
Править
Я пропустил это, Вы сделали это. В этом случае необходимо проверить, что ViewState включают.
Во-первых, я хотел бы разъяснить что-то. Действительно ли это - сообщение назад (прохождение назад в сервер) никогда не происходят, или действительно ли это - сообщение, назад происходит, но это никогда не входит в ddlCountry_SelectedIndexChanged обработчик событий?
Я не уверен, какой случай Вы имеете, но если это - второй случай, я могу предложить некоторое предложение. Если это - первый случай, то следующее к вашему сведению.
Для второго случая (обработчик событий никогда не стреляет даже при том, что запрос сделал), можно хотеть попробовать следующие предложения:
Остерегайтесь этого при вызове Управления. DataBind (), состояние отображения и размещают назад информацию, больше не было бы доступно от управления. В случае состояния отображения идет, между сообщением назад, значения DropDownList были бы сохранены в целости (список не делает, чтобы быть восстановлением). При издании другого DataBind в OnLoad он убрал бы свои данные состояния отображения, и событие SelectedIndexChanged никогда не запускалось бы.
В случае состояния отображения выключен, у Вас нет выбора, кроме как снова переплетать список каждый раз. Когда сообщение назад происходит, существуют внутренние вызовы ASP.NET для заполнения значения от Запроса. Params к соответствующим средствам управления, и я подозреваю, происходят в то время между OnInit и OnLoad. В этом случае восстановление значений списка в OnInit позволит системе запустить события правильно.
Спасибо за внимание читая это, и приветствует всех, чтобы исправить, если я неправ.