有一ID列,想给它加上超连接即"<a href='a.aspx?r="+id+"'>查看详细</a>"
刚网上找了一下,都是要用到模板列的,那样太麻烦,
有很多个页面,用模板列的话如果字段增加的话就要一个一个去修改。
我的页面是弄成多个页面的gridview调用同一个方法得到datatable的,
前台的gridview不做任何操作,就一空白gridview
在查询数据的时候直接修改datatable,但这样显示到gridview后是直接将html符号显示出来 了。
弄了好久得不到结果,所以现在想退一步,在.aspx.cs里面修改列内容增加超连接,但没找到合适的方法,都是用模板列。可不可以不修改.aspx页面的gridview(不用事件),直接在后台通过gridview.rows[n][m]=...修改gridview内容实现超连接列

解决方案 »

  1.   

    不用事件不用模板列,可以用hyperlinkfield
      

  2.   

    非要在gridview上改就在gridview绑定后遍历GridView.Rows
      

  3.   

     protected void gv_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
                {
                 row.Cells[0].Text = "<a target='_blank' href=xx.aspx' </a>";
                }
    }
    如果每列都加
    则加循环
     for (int i = 0; i <= row.Cells.Count - 1; i++)
      

  4.   

    上面错了。我原本来的代码url有参数,删多了。应该是:
    row.Cells[0].Text = "<a target='_blank' href='xx.aspx'>" + row.Cells[0].Text + "</a>";
      

  5.   

    不是,就是想拖个gridview1
    然后
    GridView1.DataSource = datatable;
    GridView1.DataBind();
    就这样
    datatable中包括一些html连接,要正常显示到gridview,但这样直接绑定没模板列的话做的html标记都直接显示出来了。
      

  6.   

    <Columns>
          <asp:TemplateField HeaderText="操作">
               <ItemTemplate>
                 "<a href='a.aspx?r="<%#Eval("ID")%>"'>操作</a>
    <ItemTemplate>                                                                               </asp:TemplateField>
    </Columns>
      

  7.   

    就是啊,以下代码供参考,楼主酌情删改:
    public HyperLinkField CreateHyperLinkField(StyleSoft.Common4.Models.MethodDataKey pProperty) {
        MyHelper.Assert(pProperty != null, new ArgumentNullException("参数pProperty不能为null"));
        HyperLinkField _clm = new HyperLinkField();
        _clm.DataTextField = MyHelper.ToString(pProperty.DataField);
        _clm.DataNavigateUrlFormatString = MyHelper.ToString(pProperty.Url)
            + "?"
            + _clm.DataTextField
            + "={0}";
        _clm.DataNavigateUrlFields = new string[] { _clm.DataTextField };
        _clm.Target = "_blank";
        _clm.HeaderText = MyHelper.ToString(pProperty.Caption);
        _clm.SortExpression = MyHelper.ToString(pProperty.SortExpression);
        string _SumExpression = MyHelper.ToString(pProperty.SumExpression);
        if(_SumExpression != "" && this.ShowFooter) {
            _clm.FooterText = _SumExpression;
            }
        return _clm;
        }//end function
      

  8.   

    谢谢
    是不用模板不用事件哦,你的方法用了事件。
    因为是多个页面用同一个方法得到的datatable,所以如果用事件的话我一样要一个页面一个页面去修改。
    我希望的是aspx和aspx.cs上的代码越少越好,而且数据库进行一些修改不会受影响。用Sandy945的方法解决了,我自己之前纠结于gv.rows[i]["aa"]的写法,没考虑到cells所以浪费了不少时间。
    下面这代码写到类里,每个页面绑定的时候只要调用一下就可以了,这样我很多内容就可以统一在类里修改,而不需要一个页面一个页面去修改了。这只是我的想法,不知道还有没有更好的方法。        public void resetData(GridView gv)
            {
                int n = gv.Rows.Count;
                if (n < 1)
                {
                    return;
                }
                int m = gv.Rows[0].Cells.Count;
                for (int i = 0; i < n; i++)
                {
                    gv.Rows[i].Cells[m - 1].Text = "<a href='result.aspx?r=" + gv.Rows[i].Cells[m - 1].Text + "'>查看详细</a>";
                }
            }