Выделите строку сетки в панели обновления, не отправляя назад - PullRequest
3 голосов
/ 07 августа 2010

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

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 ]

3 голосов
/ 07 августа 2010

Как выделить gridview, когда выбрана строка

, для этого вы должны написать этот код в своем коде позади файла в событии 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>

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

2 голосов
/ 07 августа 2010

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

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));
1 голос
/ 07 августа 2010

Во-первых, вы не можете применить текстовое оформление к

... или в этом отношении.Вы должны применить его к элементам внутри.

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

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-го.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...