有没有那个遇到过在GridView中当
e.Row.RowType == DataControlRowType.Header条件满足时在断点跟踪的时候不会走客户端此段代码
<asp:TemplateField HeaderText="操作">
                                    <ItemTemplate>
                                        <asp:HyperLink ID="lnk" runat="server">处理</asp:HyperLink>
                                        <asp:LinkButton ID="lbQC" runat="server" CommandName="QianChu">签出</asp:LinkButton>
                                        <asp:LinkButton ID="lbQR" runat="server" CommandName="QianRu">签入</asp:LinkButton>
                                    </ItemTemplate>
                                </asp:TemplateField>
我第一次执行的时候能成功,但是后面再点查询按钮当e.Row.RowType == DataControlRowType.Header时他就不会判断客户端模板列那段代码,从而照成在在RowDataBound事件中以下代码出错,找不到控件,从而lnk获取的值为null.
HyperLink lnk = (HyperLink)e.Row.FindControl("lnk"); //处理
                    lnk.Visible = false;
                    LinkButton lbQR = (LinkButton)e.Row.FindControl("lbQR"); //签入
                    lbQR.Visible = false;
我主要的目的就是想根据不同的条件来在模板列中显示特定的按钮,如果大家有更好的办法提供最好.谢谢!

解决方案 »

  1.   

    Page_Load()
    {
        If(!IsPostBack)
    }
      

  2.   


    //当绑定DataList1中的每一项时的处理方法 
        protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e) 
        { 
            //如果要绑定的项是交替项或者是普通项 
            //注意此外还有脚模板和脚模版 
            if (e.Item.ItemType == ListItemType.Item || 
                 e.Item.ItemType == ListItemType.AlternatingItem) 
            { 
                //e.Item表示当前绑定的那一行 
                //利用e.Item.FindControl("Label1")来找到那一行的id为"Label1"的Label控件 
                Label lbSex = (Label)(e.Item.FindControl("Label1")); 
                //利用e.Item.FindControl("Label1")来找到那一行的id为"Label1"的Label控件 
                DataList dl2 = (DataList)(e.Item.FindControl("DataList2"));             bool male = bool.Parse(lbSex.Text); 
                dl2.DataSource = GetDataTable(male); 
                dl2.DataBind(); 
            } 
        } 应该这么写,我还做了注释。
      

  3.   

    asp.net夜话之八:数据绑定控件
    在asp.net中所有的数据库绑定控件都是从BaseDataBoundControl这个抽象类派生的,这个抽象类定义了几个重要属性和一个重要方法:DataSource属性:指定数据绑定控件的数据来源,显示的时候程序将会从这个数据源中获取数据并显示。DataSourceID属性:指定数据绑定控件的数据源控件的ID, 显示的时候程序将会根据这个ID找到相应的数据源控件,并利用这个数据源控件中指定方法获取数据并显示。DataBind()方法:当指定了数据绑定控件的DataSource属性或者DataSourceID属性之后,再调用DataBind()方法才会显示绑定的数据。并且在使用数据源时,会首先尝试使用DataSourceID属性标识的数据源,如果没有设置DataSourceID时才会用到DataSource属性标识的数据源。也就是说DataSource和DataSourceID两个属性不能同时使用。数据绑定控件的DataSource控件属性必须是一个可以枚举的数据源,如实现了ICollection、IEnumerable或IListSource接口的类的实例。
      

  4.   

    原来你没写  if (e.Item.ItemType == ListItemType.Item || 
                 e.Item.ItemType == ListItemType.AlternatingItem) 
       <ItemTemplate> 
    里面的东西当然只有在item或AlternatingItem中才有.
      

  5.   

    老大你们提供的方法是DataGird 中的啊,GridView中根本不是这么写的
    e.Item.ItemType == ListItemType.Item || 
                e.Item.ItemType == ListItemType.AlternatingItem
      

  6.   

    现在结贴,随便说我的解决办法:
    原因就是在queryCondition方法中我根据查询条件来显示不同的时间,判断是下单时间还是发货时间,所以我就根据RadioButtonList选择的不同而判断而更改时间绑定的字段,但是第一次进来的时候没问题,后面选择发货时间也没问题,
    因为有判断,然而再选择下单时间的话这个时候数据库中的查询条件也是对的,查询的是下单时间,我页面<asp:BoundField DataField="CreatedDate" HeaderText="下单时间" />这里也是写的下单时间,但是gridview中还是
    显示发货时间,好象有什么东西记住了数据一样,不管你有没有绑定还是原来的时间字段,
    所以我现在将时间列给全部显示再根据RadioButtonList选择的不同值来判断那列被显示,这样就可以了。以下是queryCondition方法代码,但是此方法中替换列的方法在DataGrid中是能行得通的,期待GridView中的类式解决办法.        private string queryCondition()
            {
                //初始化开始和结束时间
                if (dbBeginDate.Value != DateTime.MinValue && dbEndDate.Value != DateTime.MinValue)
                {
                    if (rblTimeOption.SelectedValue == "0")
                    {
                        //按下单时间
                        condition = String.Format("{0}{1}{2}{3}{4}{5}", condition, " And CreatedDate >= '", dbBeginDate.Value, "' And CreatedDate < '", dbEndDate.Value.AddDays(1), "'");
                        ViewState["columnDateName"] = "下单时间";
                    }
                    else
                    {
                        //按发货时间
                        condition = String.Format("{0}{1}{2}{3}{4}{5}", condition, " And LastModified >= '", dbBeginDate.Value, "' And LastModified < '", dbEndDate.Value.AddDays(1), "'");
                        BoundField updateColumn = new BoundField();
                        updateColumn.DataField = "LastModified";
                        updateColumn.HeaderText = "发货时间";
                        ViewState["columnDateName"] = "发货时间";
                        grvOrderList.Columns.RemoveAt(2);
                        grvOrderList.Columns.Insert(2, updateColumn);
                    }
                }