У меня есть скрытое поле на моей странице
<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)
Так может ли кто-нибудь дать мне знать о другом способе выполнения этой задачи? Еще раз спасибо заранее.