在更新面板中突出显示gridview行而不回发

时间:2010-08-07 07:33:30

标签: c# .net asp.net gridview

我在更新面板中有一个gridview,其中包含以下代码来选择行,这反过来会更新另一个更新面板,其中包含表单记录中的详细信息。

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));   

        }
    }

我从数据库手动绑定gridview并且不想重新绑定网格只是为了突出显示该行,但我似乎无法向onclick事件添加任何javascript,它似乎要么显示GetPostBackClientHyperlink或该行突出显示javascript。

3 个答案:

答案 0 :(得分:3)

How to highlight gridview when row is selected

为此,您必须在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>

它将突出显示所选行..

答案 1 :(得分:2)

我正在努力将点击事件添加到行数据绑定中:

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

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

使用';'在行突出显示方法后添加PostBack选择似乎有效。

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

答案 2 :(得分:1)

首先,您不能将文本修饰应用于&lt; tr&gt; ...或&lt; td&gt;对于这个问题。您需要将其应用于内部元素。

您可以尝试以下几项调整 -

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



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

第一个代码对我有用。没有任何方便测试第二个。