У меня есть скрытое поле на моей странице
<input runat="server" type="hidden" id="selectedIndex" />
и он устанавливается этой связкой кода, событием onclick для строки gridview:
var gridViewCtlId = '<%=GridView.ClientID%>';
var selectedIndex = '#<%=selectedIndex.ClientID%>';
var itemVisible = '<%=ItemVisible.ClientID%>';
var gridViewCtl = null;
var curSelRow = null;
var previousRowIndx = null;
window.onload = function showQuery()
{
if ($(selectedIndex).val() != undefined)
{
if ($(selectedIndex).val() != '')
{
var prevRowID = $(selectedIndex).val();
var prevRow = getSelectedRow(prevRowID);
prevRow.style.backgroundColor = '#1A8CD4';
}
}
}
function getGridViewControl(rowIdx)
{
if (gridViewCtl == null)
{
gridViewCtl = document.getElementById(gridViewCtlId);
}
}
function onGridViewRowSelected(rowIdx)
{
if (document.getElementById(gridViewCtlId).disabled == false)
{
var selRowCCA = getSelectedRow(rowIdx);
if (curSelRow != null)
{
var previousRow = getSelectedRow(previousRowIndx);
var CountIdx = previousRowIndx % 2;
if (document.getElementById(itemVisible) == null)
{
if (CountIdx == 0)
{
previousRow.style.backgroundColor = 'Silver';
}
else
{
previousRow.style.backgroundColor = 'White';
}
}
}
if (null != selRow)
{
previousRowIndx = rowIdx;
curSelRow = selRow;
selRow.style.backgroundColor = '#1A8CD4';
}
}
}
function getSelectedRow(rowIdx)
{
getGridViewControl(rowIdx);
if (gridViewCtl != null)
{
$(selectedIndex).val(rowIdx);
return gridViewCtl.rows[rowIdx];
}
return null;
}
Вот что происходит: при первой загрузке страницы скрытое поле не определено, как и должно быть. Когда я нажимаю на строку, а затем нажимаю кнопку «Выбрать», которая затем вызывает это:
GridView.Attributes.Add("disabled", "true");
Вид сетки отключается (вместе с кнопкой выбора), и появляется другое представление сетки (что должно произойти в зависимости от того, что выбрано в первом представлении сетки). Итак, вот проблема. Когда я щелкаю строку в представлении сетки (я говорю только о начальном представлении сетки, а не о вторичном, которое появляется, это не проблема) и нажимаю кнопку выбора, все становится серым, и большую часть времени выбранная строка будет выделена при загрузке страницы (в других случаях по какой-то причине по умолчанию используется строка №2). Затем, скажем, вы щелкнули строку 4, затем щелкните строку 1, а затем щелкните выбрать, по какой-то причине строка 4 останется выделенной, а данные строки 4 будут заполнять второе представление сетки, как будто вы никогда не щелкали строку 1. Но если я щелкну строку 4 затем щелкните строку 1, затем снова щелкните строку 1, сохраняет ли она. Кто-нибудь знает, почему так происходит?
Кроме того, я в значительной степени пытаюсь отключить первое представление сетки при нажатии кнопки выбора, поэтому я делаю
GridView.Attributes.Add("disabled", "true");
а не GridView.Enabled = false;
Если пользователь повторно нажимает кнопку поиска (другая кнопка, расположенная ранее на странице, которая делает это представление сетки видимым), я бы хотел, чтобы вторичное представление сетки было скрыто, а основное представление сетки (рассматриваемое) было повторно включено. . Но делаю
GridView.Attributes.Add("disabled", "false");
при срабатывании кнопки поиска отключается только просмотр сетки, что очень странно. Теперь я знаю, что отключенное поле не поддерживается никаким другим браузером, кроме IE, и я использую его только потому, что мне нужно проверить, отключено ли отображение сетки, чтобы пользователь не мог щелкнуть другую строку после того, как сделал свой выбор (что происходит если я не сделаю следующее:
if (document.getElementById(gridViewCtlId).disabled == false)
Так может ли кто-нибудь сообщить мне о другом способе выполнения этой задачи? Еще раз спасибо заранее.