кликабельные строки в datagridview в asp.net с использованием ajax - PullRequest
1 голос
/ 21 ноября 2010

Я реализовал кликабельные строки в сетке данных, используя ajax. Проблема в том, что когда я щелкаю строку на странице результатов, я перенаправляю на другую страницу для просмотра данных. На этой странице у меня есть кнопка «обновить», с помощью которой я могу обновить данные в таблице в БД, и когда я нажимаю на нее, я перенаправляю обратно на страницу «Результаты», а затем снова нажимаю на ту же строку, чтобы просмотреть ее данные, данные обновлены и все еще старые данные. Дело в том, что данные обновляются в таблице в БД, как будто страница сохраняет старые данные, которые он принес, и использует их, и я не знаю, как сказать ему, чтобы он приносил новые данные.

Вот код для создания кликабельных строк:

protected void pendingGrid_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            e.Row.Attributes.Add("onclick", "return GetDataUsingAJAX(" + e.Row.RowIndex + ",'pending');");
            e.Row.Attributes.Add("style", "cursor:hand");
        }
    }

вот javascript страницы результатов:

function GetDataUsingAJAX(row, table) {
        obj = new XMLHttpRequest();
        if (obj != null) {
            obj.onreadystatechange = RedirectToViewDetails;
            obj.open("GET", "Results2.aspx?row=" + row + "&table=" + table, true);
            obj.send(null);
        }
        return false;
    }


    function RedirectToViewDetails() {

        if (obj.readyState == 4) {
            if (obj.status == 200) {
                var retval = obj.responseText.split("&");
                window.location = "YellowCardStart.aspx?mode=" + retval[0] + "&cntct=" + retval[1] + "&strtDate=" + retval[2] + "&endDate=" + retval[3] + "&strtTime=" + retval[4] + "&endTime=" + retval[5] + "&tools=" + retval[6] + "&id=" + retval[7] + "&table=" + retval[8] + "&bldng=" + retval[9] + "&loc=" + retval[10] + "&devTool=" + retval[11] + "&cmpny=" + retval[12] + "&phn=" + retval[13] + "&lssApp=" + retval[14] + "&ehsApp=" + retval[15] + "&cmnts=" + retval[16] + "&created=" + retval[17];             }
            else {
                alert("Error retrieving data!");
            }
        }
    }

А вот код в page_load результатов:

if (Request.QueryString["row"] != null)
        {
            Response.Clear();
            if (Request.QueryString["table"] != null)
            {
                DataTable dt = new DataTable();
                if (Request.QueryString["table"] == "fa")
                {
                    dt = DataAccessLayer.selectFromTable(Int32.Parse(activeFAGrid.Rows[Int16.Parse(Request.QueryString["row"])].Cells[0].Text), "active");
                    Response.Write(dt.Rows[0][1].ToString() + "&" + dt.Rows[0][2].ToString() + "&" + dt.Rows[0][3].ToString() + "&" + dt.Rows[0][4].ToString() + "&" + dt.Rows[0][5].ToString() + "&" + dt.Rows[0][6].ToString() + "&" + dt.Rows[0][7].ToString() + "&" + dt.Rows[0][0].ToString() + "&" + "active" + "&" + dt.Rows[0][8].ToString() + "&" + dt.Rows[0][9].ToString() + "&" + dt.Rows[0][10].ToString() + "&" + dt.Rows[0][11].ToString() + "&" + dt.Rows[0][12].ToString() + "&" + dt.Rows[0][13].ToString() + "&" + dt.Rows[0][14].ToString() + "&" + dt.Rows[0][15].ToString() + "&" + dt.Rows[0][16].ToString());
                }
Response.End();
            }
        }

функция SelectFromTable извлекает данные из БД.

Помощь будет действительно оценена, я действительно потерялся.

Заранее спасибо,

Грег

Ответы [ 2 ]

1 голос
/ 21 ноября 2010

Я думаю, вы обнаружите, что ваш браузер кэширует ответ на ваш вызов AJAX, попробуйте использовать POST вместо GET для вашего вызова AJAX.

0 голосов
/ 21 ноября 2010

Просто, чтобы вы знали, это работало с использованием "POST", но мне пришлось удалить эти 2 строки, чтобы это работало:

    obj.setRequestHeader("Content-length", params.length); 
    obj.setRequestHeader("Connection", "close"); 

(возможно, достаточно будет удалить только 2-ю строку)

...