我用HyperLinkField 在GridView中实现修改页面跳转功能,用HyperLinkField 传过去id编号,然后数据库有个字段叫状态,如果状态是2,就不跳转,不是2就跳转到修改页面,怎么实现啊,请各位指导一下

解决方案 »

  1.   


    加个 隐藏的label 存状态  后台 判断 label 的值 在处理跳转
      

  2.   

    方法1,使用TemplateFiled使用3目运算符判断
    方法2,在绑定事件里面判断
      

  3.   

    例子1
    <%@ Page Language="C#" EnableViewState="false" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <script runat="server">
        // 计算数据,完全可以从数据库取得
        System.Data.DataTable CreateDataSourceByXianhuiMeng()
        {
            System.Data.DataTable dt = new System.Data.DataTable();
            dt.Columns.Add(new System.Data.DataColumn("Id", typeof(System.Int32)));
            dt.Columns.Add(new System.Data.DataColumn("State", typeof(System.String)));
            for (int i = 0; i < 8; i++)
            {
                dt.Rows.Add(new Object[] { i, i.ToString() });
            }
            return dt;
        }    protected void Page_Load(object sender, EventArgs e)
        {        GridView1.DataSource = this.CreateDataSourceByXianhuiMeng();
            GridView1.DataBind();
        }    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                String State = DataBinder.Eval(e.Row.DataItem, "State").ToString();
                HyperLink h = e.Row.Cells[1].Controls[0] as HyperLink;
                if (State.Equals("2"))
                {
                    h.Visible = false;
                }
            }
        }
    </script>
    <html>
    <head>
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" OnRowDataBound="GridView1_RowDataBound">
            <Columns>
                <asp:BoundField DataField="id" HeaderText="测试的" />
                <asp:HyperLinkField DataNavigateUrlFields="Id" DataNavigateUrlFormatString="show.aspx?id={0}"
                    DataTextField="State" />
            </Columns>
        </asp:GridView>
        </form>
    </body>
    </html>
      

  4.   

    例子2
    <%@ Page Language="C#" EnableViewState="false" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <script runat="server">
        // 计算数据,完全可以从数据库取得
        System.Data.DataTable CreateDataSourceByXianhuiMeng()
        {
            System.Data.DataTable dt = new System.Data.DataTable();
            dt.Columns.Add(new System.Data.DataColumn("Id", typeof(System.Int32)));
            dt.Columns.Add(new System.Data.DataColumn("State", typeof(System.String)));
            for (int i = 0; i < 8; i++)
            {
                dt.Rows.Add(new Object[] { i, i.ToString() });
            }
            return dt;
        }    protected void Page_Load(object sender, EventArgs e)
        {        GridView1.DataSource = this.CreateDataSourceByXianhuiMeng();
            GridView1.DataBind();
        }</script>
    <html>
    <head>
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
            <Columns>
                <asp:BoundField DataField="id" HeaderText="测试的" />
                <asp:TemplateField>
                    <ItemTemplate>
                        <%#Eval("State").ToString() == "2" ? "" : "<a href='show.aspx?id=" + Eval("Id") + "'>" + Eval("State") + "</a>"%>
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
        </asp:GridView>
        </form>
    </body>
    </html>
      

  5.   

    谢谢楼上的哥们啊 由于急着用 我自己解决了,我换用了linkbutton,用CommandArgument传递了连个参数,包括状态参数,然后再后台用OnCommand事件判断状态,如果符合要求,就跳转,并传递编号参数,如果不符合要求就给出一个对话框提示。不过还是谢谢你的例子,同时感谢1楼和2楼的回答