有没有那个遇到过在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;
我主要的目的就是想根据不同的条件来在模板列中显示特定的按钮,如果大家有更好的办法提供最好.谢谢!
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;
我主要的目的就是想根据不同的条件来在模板列中显示特定的按钮,如果大家有更好的办法提供最好.谢谢!
{
If(!IsPostBack)
}
//当绑定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();
}
} 应该这么写,我还做了注释。
在asp.net中所有的数据库绑定控件都是从BaseDataBoundControl这个抽象类派生的,这个抽象类定义了几个重要属性和一个重要方法:DataSource属性:指定数据绑定控件的数据来源,显示的时候程序将会从这个数据源中获取数据并显示。DataSourceID属性:指定数据绑定控件的数据源控件的ID, 显示的时候程序将会根据这个ID找到相应的数据源控件,并利用这个数据源控件中指定方法获取数据并显示。DataBind()方法:当指定了数据绑定控件的DataSource属性或者DataSourceID属性之后,再调用DataBind()方法才会显示绑定的数据。并且在使用数据源时,会首先尝试使用DataSourceID属性标识的数据源,如果没有设置DataSourceID时才会用到DataSource属性标识的数据源。也就是说DataSource和DataSourceID两个属性不能同时使用。数据绑定控件的DataSource控件属性必须是一个可以枚举的数据源,如实现了ICollection、IEnumerable或IListSource接口的类的实例。
e.Item.ItemType == ListItemType.AlternatingItem)
<ItemTemplate>
里面的东西当然只有在item或AlternatingItem中才有.
e.Item.ItemType == ListItemType.Item ||
e.Item.ItemType == ListItemType.AlternatingItem
原因就是在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);
}
}