Member 14594378 Ответов: 2

Gridview последняя строка не проверяется


Я пытаюсь, пока в Gridview присутствует столбец IsActive, а затем проверяется флажок, который помещается внутри Gridview..весь код работает нормально, только флажок последней строки не установлен..pls говорят мне разрешение

Что я уже пробовал:

<pre>if (e.Row.RowType == DataControlRowType.DataRow)
        {
           
            foreach (GridViewRow row in gdvUserDetails.Rows)
            {

                for (int i = 0; i < dt.Rows.Count; i++)
                {

                    string cellText = dt.Rows[i][2].ToString();

                    CheckBox chk = (CheckBox)row.Cells[0].FindControl("chkRow");

                    if (cellText == "1")
                    {

                        chk.Checked = true;

                    }
                    else
                    {
                        chk.Checked = false;
                    }


                }

            }

        }

phil.o

В качестве примечания вы можете написать: chk.Checked = (cellText == "1"); не теряя при этом никакой читабельности.

Richard Deeming

NB: Ваши вложенные циклы не делают то, что вы думаете, что они делают. Честно говоря, я изо всех сил пытаюсь понять, что вы думаете, что они делают; но что бы это ни было, они этого не делают.

Вы можете эффективно заменить код на:

if (e.Row.RowType == DataControlRowType.DataRow)
{
    string cellText = dt.Rows[dt.Rows.Count - 1][2].ToString();
    bool isChecked = cellText == "1";
    
    foreach (GridViewRow row in gdvUserDetails.Rows)
    {
        CheckBox chk = (CheckBox)row.Cells[0].FindControl("chkRow");
        chk.Checked = isChecked;
    }
}

2 Ответов

Рейтинг:
1

OriginalGriff

На самом деле мы ничем не можем вам помочь - все зависит от ваших данных и от того, что произойдет. Но это какой - то странный код ... Я не вижу реального смысла во вложенных циклах, учитывая, что результат внутреннего цикла будет один и тот же каждый раз ...

Так что все будет зависеть от тебя.
К счастью, у вас есть инструмент, который поможет вам выяснить, что происходит: отладчик. Если вы не знаете, как его использовать, то быстрый Google для "Visual Studio debugger" должен дать вам необходимую информацию.

Поместите точку останова в первую строку функции и запустите код через отладчик. Затем посмотрите на свой код и на свои данные и определите, что должно произойти вручную. Затем по одному шагу в каждой строке проверяйте, что то, что вы ожидали, произойдет именно так, как и произошло. Когда это не так, тогда у вас есть проблема, и вы можете вернуться назад (или запустить ее снова и посмотреть более внимательно), чтобы выяснить, почему.

Извините, но мы не можем сделать это за вас - пришло время вам освоить новый (и очень, очень полезный) навык: отладку!


CPallini

5.

Рейтинг:
1

Maciej Los

В соответствии с вашим кодом:

string cellText = dt.Rows[i][2].ToString();
CheckBox chk = (CheckBox)row.Cells[0].FindControl("chkRow");
if (cellText == "1")
{
    chk.Checked = true;
}
else
{
    chk.Checked = false;
}


Возможно... в последнем ряду cellText переменная не содержит "1"...


CPallini

Возможно.
5.

Member 14594378

Я использовал размер страницы =10, и все строки, которые привязываются, имеют значение holdind 1 ...но все пейджеры последнего ряда не проверялись..но они держат IsActive =1

Maciej Los

:смеяться:
Спасибо, Карло.