我创建了一个gridview,然后每一项后面都有一个修改选项。在页面代码里面有一段代码如下:
           <asp:HyperLinkField HeaderText="修改" DataTextFormatString="修改" Text="修改" DataNavigateUrlFields="studentID" 
            DataNavigateUrlFormatString="StudentModifyPage.aspx?student_ID={0}"
                />
我的本意是获取带这项里面的学生id信息,并且把这个id信息传递到StudentModifyPage页面里面,然后就可以对这一项进行修改,现在我想增加一个功能,就是在点击这个修改时,会将student_ID与我的用户属性相比较,既是这个student_ID所属的学校和我登陆用户所属的学校比较,如果相等则进入到StudentModifyPage页面,否则,就提示不能修改,请问这个该怎么做?想了半天没有找到好的方法,往高手指点,谢谢

解决方案 »

  1.   

    我的用户学校信息可以通过Session["school"]来获取如何在绑定事件里面比较?麻烦有参考的代码吗?谢了
      

  2.   

    做个判断啊,在RowDataBound事件写换成模板列
      

  3.   

    本帖最后由 net_lover 于 2010-11-17 23:31:30 编辑
      

  4.   

    前台模板列
    <asp:TemplateField HeaderText="">
                        <ItemTemplate>
                            <a id="aEdit" runat="server">修改</a><asp:HiddenField ID="hdStudentId" runat="server" />
                        </ItemTemplate>
                    </asp:TemplateField>后台事件
     protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                HtmlAnchor aEdit = e.Row.FindControl("aEdit") as HtmlAnchor;
                HiddenField hdStudentId = e.Row.FindControl("hdStudentId") as HiddenField;
                if (hdStudentId.Value == Session["school"].ToString())
                {
                    aEdit.HRef = string.Format("StudentModifyPage.aspx?student_ID={0}",hdStudentId.Value);
                }
                else
                {
                    aEdit.Attributes.Add("onclick","alert('不能修改');return false;");
                }
            }
        }
      

  5.   

    首先感谢各位提供的方法,我还有个疑问,我这个gridview首先是先通过一个查询,使用
            SearchGridView.DataSource = dt;
            SearchGridView.DataBind();
    把数据先绑定到gridview中,这个时候我再在gridview显示的某一项中点击修改。如果我使用了RowDataBound方法的话会和我之前的点击按钮进行查询有冲突,因此个人感觉是不是使用这个时间不是很好?或者是我没有完全理解各位的意思?
      

  6.   

    在模板列里建一个LinkButton,然后在LinkButton的事件做判断,如果相等就跳转,不相等就给出提示,这样就能解决了
      

  7.   

    可以在绑定后进行判断,比如这样:GridView1.DataSource=dt;
    GridView1.dataBind();
    for(int i=0;i<GridView1.Rows.Count;i++)
    {
       GridView1.Rows[i].FindControl()  //用这个方法找到你需要操作的控件,判断 这个是绑定后执行
    }
      

  8.   

    也可以使用RowCommand事件,然后在做判断!
      

  9.   

    给你提供一个方案思路和部分代码,希望能帮到你。
    我理解你的需求是:
    1、当登录用户的student_ID和当前行的student_ID相等时显示(或启用)“修改”,当不同的时候不显示(或禁用)“修改”。
    2、点击“修改”打开新页面StudentModifyPage.aspx并传递参数student_ID
    总之就是登陆用户只能修改自己的信息。
    方案如下:
    前台GridView修改按钮处代码(替换原来的HyperLinkField)
    <a target="_blank" href='StudentModifyPage.aspx?student_ID=<%# Eval("student_ID")%>'><%# (Eval("student_ID")).ToString()==StudentID?"修改":""%></a>
    StudentID这个是当前登陆用户ID,下面说下这个变量怎么弄:
    在页面后台代码设置一个全局变量string StudentID,然后在Page_Load事件中取到当前的student_ID赋值给StudentID,这样前台就能直接那么用了。