Выделите строку сетки в панели обновления, не отправляя назад

У меня есть сетка в панели обновлений со следующим кодом для выбора строки, которая, в свою очередь, обновляет другую панель обновлений с подробностями из записи формы.

protected void gvMainGrid_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            //Make the entire row clickable to select this record
            //Uses javascript to post page back
            e.Row.Attributes["onmouseover"] = "this.style.cursor='hand';this.style.textDecoration='underline';";
            e.Row.Attributes["onmouseout"] = "this.style.textDecoration='none';";
            e.Row.Attributes.Add("onclick", ClientScript.GetPostBackClientHyperlink(this.gvMainGrid, "Select$" + e.Row.RowIndex));   

        }
    }

Я вручную связываю вид сетки из базы данных и не хочу перепривязывать сетку только для выделения строки, но я не могу добавить какой-либо javascript к событию onclick, похоже, он либо показывает ссылку GetPostBackClientHyperlink, либо выделение строки JavaScript.

3 ответа

Решение

Я изо всех сил пытался добавить оба события щелчка к строке данных:

e.Row.Attributes.Add("onclick", ClientScript.GetPostBackClientHyperlink(this.gvMainGrid, "Select$" + e.Row.RowIndex));   

e.Row.Attributes.Add("onclick", "onGridViewRowSelected('" + e.Row.RowIndex.ToString() + "')");

Добавление PostBack select после метода выделения строки с помощью ';' кажется, сработало.

e.Row.Attributes.Add("onclick", "onGridViewRowSelected('" + e.Row.RowIndex.ToString() + "');" + ClientScript.GetPostBackClientHyperlink(this.gvMainGrid, "Select$" + e.Row.RowIndex));

Как выделить вид сетки при выделении строки

для этого вы должны написать этот код в своем файле кода в событии OnRowCreated, или вы также можете написать этот код в событии OnRowDataBound сетки...

    protected void ctlGridView_OnRowCreated(object sender, GridViewRowEventArgs e)
    {    
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            e.Row.Attributes.Add("onclick", "onGridViewRowSelected('" + e.Row.RowIndex.ToString() + "')");
        }            
    }

и добавить этот скрипт

<script language="javascript" type="text/javascript">
    var gridViewCtlId = '<%=ctlGridView.ClientID%>';
    var gridViewCtl = null;
    var curSelRow = null;
    function getGridViewControl()
    {
        if (null == gridViewCtl)
        {
            gridViewCtl = document.getElementById(gridViewCtlId);
        }
    }

    function onGridViewRowSelected(rowIdx)
    {
        var selRow = getSelectedRow(rowIdx);
        if (curSelRow != null)
        {
            curSelRow.style.backgroundColor = '#ffffff';
        }

        if (null != selRow)
        {
            curSelRow = selRow;
            curSelRow.style.backgroundColor = '#ababab';
        }
    }

    function getSelectedRow(rowIdx)
    {
        getGridViewControl();
        if (null != gridViewCtl)
        {
            return gridViewCtl.rows[rowIdx];
        }
        return null;
    }
</script>

и он выделит выбранную строку..

Во-первых, вы не можете применить текстовое оформление к ... или в этом отношении. Вы должны применить это к элементам внутри.

Вот несколько настроек, которые вы можете попробовать:

e.Row.Attributes.Add("onmouseover", "this.style.cursor='hand';";



e.Row.Attributes.Add("onclick", ClientScript.GetPostBackClientHyperlink(this.gvMainGrid.ClientId, "Select$" + e.Row.RowIndex)); 

1-й работает у меня в коде. Не было ничего пригодного для проверки 2-го.

Другие вопросы по тегам