gridview已经配置好数据源,其中的一列也已经加上超级链接,我想在这一列中任意一个单元格上单击时打开一个新的页面(已实现),然后在新页面上根据鼠标的点击决定显示些什么内容有点啰嗦,但是我也不知道该怎么说才能明白,这样吧,假设目前页面是a.aspx,页面上放了gridview控件,共有5列,记为c1-c5,现在,c1列里有r行数据,记为r1-rn,n的值由数据库中的内容自行确定,c1列里每行都是加了超链接的,我希望任意点击一个单元格,譬如r2行c1列,那么新弹出一个页面(已实现),这个新页面上也放一个gridview控件,显示内容根据刚才的r2行c1列的内容来确定,我想知道1、如何根据鼠标点击确定具体的行数,因为我觉得只有这样才能获得单元格里的内容;2、如何获取鼠标点击的单元格里的内容并传给新页面(用session?);3、不要吧超连接去掉。非常感谢!

解决方案 »

  1.   

    GridView中的超链接GridView中的超级链接,可以设置一个模版列,放入超级链接的控件,设置绑定参数即可。数据绑定方式有两种,如下示例:
    Eval方式     <%# Eval("id") %>
    Bind方式    <%# Bind("id","~/info.aspx?id={0}") %>推荐使用第一种方式,可以在一个<%# %>里放入多个绑定,而第二种只能如此绑定一个值
    <%# Eval("id") + ":" + Eval("name")%>做超级链接的控件,我们也有多种选择:
    1 asp:LinkButton
    示例
    <asp:LinkButton ID="LinkButton2" OnClientClick=<%# "window.open('info.aspx?id=" + Eval("id") + "&name=" + Eval("name") + "')" %> runat="server"><%# "LinkButton方式绑定:" + Eval("id") %></asp:LinkButton>2 asp:HyperLink
    示例
    <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='<%# "~/info.aspx?id=" + Eval("id") + "&name=" + Eval("name") %>' Text='<%# "HyperLink控件:" + Eval("id") %>'></asp:HyperLink>3 a标签
    示例
    <a href='<%# "info.aspx?id=" + Eval("id") + "&name=" + Eval("name") %>'>a标签:<%# Eval("id") + ":" + Eval("name")%></a>
    <a href='javascript:alert("<%# "~/info.aspx?id=" + Eval("id") + "&name=" + Eval("name") %>")'>链接js事件:<%# Eval("id") %></a>
      

  2.   

    楼上的 方法可行 也可以使用 BUTTON 的 commandargument 
      

  3.   

    当数据库中表的主键不在GridView的列中显示时,可是将主键设置为GridView的DataKeyNames,然后使用GridView.DataKeys[e.RowIndex].Value获取主键的值注:int indexRow = ((GridViewRow)((LinkButton)e.CommandSource).Parent.Parent).RowIndex;
    其中红色字体LinkButton就是超链接那列的控件类型!(你应该用超链接),
    indexRow 就是你点击的行索引,得到行了再获取这行的cells[]就可以了!
      

  4.   

    public partial class cxsgdwresult : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
           //string sgdwname = Session["zjgs"].ToString();
        }
      
        protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            //int rowNumber = int.Parse(e.CommandArgument.ToString());
            //string ID = GridView1.Rows[rowNumber].Cells[2].Text.ToString();
            //Label1.Text = ID;
            
            int indexRow = ((GridViewRow)((HyperLink)e.CommandSource).Parent.Parent).RowIndex;
            Label1.Text = GridView1.Rows[indexRow].Cells[2].ToString();        
        }
        protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
        {    }
        protected void SqlDataSource1_Selecting(object sender, SqlDataSourceSelectingEventArgs e)
        {    }我的怎么执行不到红色这里呢?设了断点,page-load执行完,一点超级链接就自己跑到新页面去了,下面的程序没执行,还是这段应该放到aspx页面里?新手,又是赶鸭子上架,没几天就要交活了,莫拍我
      

  5.   

    红色的GridView1_RowCommand事件是在你点击链接时执行的事件,
    你的链接是不是写在前台的“超链接”形式啊?如果是的话肯定不会执行红色部分了,必须是后台事件才能执行,你试着把超链接那列转换成“TemplateField”
      

  6.   

    改成TemplateField以后除了超链接出来的页面以外,又多弹出了一个页面,上面只有“object”字样,用断点查看,Page_load执行完后,到前台
    1             <Columns>
    2                <asp:BoundField DataField="sgdw" HeaderText="施工单位" SortExpression="sgdw" />
    3                <asp:BoundField DataField="yqkfdw" HeaderText="油气开发单位" SortExpression="yqkfdw" />
    4                <asp:TemplateField HeaderText="井号">
    5                    <ItemTemplate>
    6                        <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='<%# Eval("jinghao", "javascript:window.open(&#039;particulauselect.aspx?jinghao={0}&#039;)") %>'
                                Target="_blank" Text='<%# Eval("jinghao") %>'></asp:HyperLink>
    7                    </ItemTemplate>
    8                </asp:TemplateField>
                    <asp:BoundField DataField="jcsj" HeaderText="检测时间" SortExpression="jcsj" />
                    <asp:BoundField DataField="sp" HeaderText="批准人" SortExpression="sp" />
                </Columns>4、5、6行反复执行了大概两、三次,label1的文字也没有改变,好像还是没有读出来,呵呵,毕竟已经有所改变了,我再尝试下,非常感谢,实在撑不住了继续请教,希望能继续给与帮助