2

我在处理 GridViews 时遇到了问题。

我有一个显示一些数据的 GridView。当我使用 IE8 单击任何行时,一切都很好,它将显示与之关联的页面。在 Chrome 下执行相同操作时,会发生浏览器正在显示目录的内容。(这真的很尴尬,因为我期待与 IE8 相同的行为)

我不知道发生了什么,我到处寻找类似的问题,但没有运气。

首先,我认为这可能与EnableViewState相关,但更改值后,一切都保持不变。

这是我的 GridView 定义的一部分:

<asp:datagrid id="sGrid" ShowHeader="True" 
    AutoGenerateColumns="False" runat="server"
                CssClass="tablelist" EnableViewState="true" UseAccessibleHeader="true" 
    onselectedindexchanged="sGrid_selectedIndexChanged">

<HeaderStyle CssClass="myHeading"></HeaderStyle>
                <Columns>
                    <asp:TemplateColumn HeaderStyle-HorizontalAlign="Left">
                        <HeaderStyle CssClass="myHeading"></HeaderStyle>
                        <ItemStyle CssClass="mySummary"></ItemStyle>
                        <HeaderTemplate>
                            &nbsp;
                        </HeaderTemplate>
                        <ItemTemplate>
                        </ItemTemplate>
                    </asp:TemplateColumn>
                    <asp:TemplateColumn HeaderStyle-HorizontalAlign="Left" HeaderText="C1">
                        <HeaderStyle CssClass="myHeading"></HeaderStyle>
                        <ItemStyle CssClass="mySummary"></ItemStyle>
                        <HeaderTemplate>
                            &nbsp;
                        </HeaderTemplate>
                        <ItemTemplate>
                        </ItemTemplate>
                    </asp:TemplateColumn>
                    <asp:TemplateColumn HeaderStyle-HorizontalAlign="Left" HeaderText="C2">
                        <HeaderStyle CssClass="myHeading"></HeaderStyle>
                        <ItemStyle CssClass="mySummary"></ItemStyle>
                        <HeaderTemplate>
                            &nbsp;
                        </HeaderTemplate>
                        <ItemTemplate>
                        </ItemTemplate>
                    </asp:TemplateColumn>                                           
                </Columns>

行点击的方法如下:

protected virtual string GetRowOnClickScript(DataGridItem item) { 
       return String.Format("rowClick(this,'{0}','{1}','{2}');",          
             ((myAdapter)item.DataItem).C1, 
             ((myAdapter)item.DataItem).C2, 
             ((myAdapter)item.DataItem).C3); 
}

RowClick 是一个 js 函数:

function rowClick(sender, C1, C2, C3)
{
  location.href = 'myPage.aspx?c1='+ C1 +'&c2='+ C2 + '&c3=' + C3;
}

该函数的使用如下:

if (IsBrowserIE(Request.ServerVariables["HTTP_USER_AGENT"]))
{
 e.Item.Attributes.Add("onclick", GetRowOnClickScript(e.Item));
}
else //Chrome
{
  AddAttributesToCell(e.Item.Cells, "onclick", GetCellOnClickScript(e.Item));
}

我相信这里的这段代码只适用于IE,不适用于任何其他浏览器!!!.

更新:

感谢 Yuriy Galanter 的帮助,我们发现无论使用哪种浏览器(至少对于 Chrome),归因都可以正常工作。

4

0 回答 0