我在做项目时,在GridView建一个超链接列,开始超链接是死的,上面绑定了好多参数,         HyperLinkColumn ruleNameColumn = new HyperLinkColumn();
            ruleNameColumn.HeaderText = "RuleID";
            ruleNameColumn.DataTextField = "RuleID";
            ruleNameColumn.DataNavigateUrlField = "RuleID";
            ruleNameColumn.HeaderStyle.Width = 100;
            ruleNameColumn.DataNavigateUrlFormatString = "ByRun.aspx?UpPage=ByRule&RuleID={0}&ModuleID=" + module + "&EQID=" + EQID + "&SDT=" + startTime + "&EDT=" + endTime;
            DataGrid2.Columns.Add(ruleNameColumn);
问题在于内容中添加行数据后,需要根据某个值来决定跳到哪个页面,也就是需要添加数据后根据该行中某个值来更改列中的DataNavigateUrlFormatString,我没有接触过这样的问题,我分不多,会尽力给.

解决方案 »

  1.   

    Gridview 添加  RowDataBound 事件   <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" OnRowDataBound="GridView1_RowDataBound">
                <Columns>
                    <asp:BoundField DataField="ID" HeaderText="编号" />
                    <asp:TemplateField HeaderText="查看">
                        <ItemTemplate>
                            <asp:HyperLink ID="HyperLink1" runat="server"></asp:HyperLink>
                        </ItemTemplate>
                    </asp:TemplateField>
                </Columns>
            </asp:GridView>
    using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Collections.Generic;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;public partial class Default2 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("ID", typeof(string));
            dt.Columns.Add("Name", typeof(string));
            DataRow dr = null;
            for (int i = 0; i < 5; i++)
            {
                dr = dt.NewRow();
                dr["ID"] = i.ToString();
                dr["Name"] = "Name" + i.ToString();
                dt.Rows.Add(dr);
            }
            GridView1.DataSource = dt;
            GridView1.DataBind();
        }
        protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType != DataControlRowType.DataRow)
            {
                return;
            }        if (e.Row.FindControl("HyperLink1") != null)
            {
                HyperLink link = e.Row.FindControl("HyperLink1") as HyperLink;            if (link != null)
                {
                    DataRowView drv = e.Row.DataItem as DataRowView;
                    link.Text = drv.Row["Name"].ToString();                if (Int32.Parse(drv.Row["ID"].ToString()) % 2 == 0)
                    {
                        link.NavigateUrl = "A.aspx";
                    }
                    else
                    {
                        link.NavigateUrl = "B.aspx";
                    }
                }
            }
        }
    }
      

  2.   

    在 RowDataBound 中写代码进行处理。FindControl 效率不高,可以自己写查找函数实现此功能或者用下标访问