C# GridView在更改页面大小或单击分页后丢失搜索结果?
我有一个gridview来显示数据和文本框来进行搜索。当我搜索时,gridview可以正确显示数据,但当我单击“更改页面大小”或转到下一页时,gridview将重新加载到原始状态。是否与ViewState有关?感谢有人能帮忙。以下是我的代码:C# GridView在更改页面大小或单击分页后丢失搜索结果?,c#,asp.net,gridview,C#,Asp.net,Gridview,我有一个gridview来显示数据和文本框来进行搜索。当我搜索时,gridview可以正确显示数据,但当我单击“更改页面大小”或转到下一页时,gridview将重新加载到原始状态。是否与ViewState有关?感谢有人能帮忙。以下是我的代码: protected void Page_Load(object sender, EventArgs e) { } protected void ddPageSize_SelectedIndexChanged(o
protected void Page_Load(object sender, EventArgs e)
{
}
protected void ddPageSize_SelectedIndexChanged(object sender, EventArgs e)
{
// handle event
DropDownList ddpagesize = sender as DropDownList;
GridView1.PageSize = Convert.ToInt32(ddpagesize.SelectedItem.Text);
ViewState["PageSize"] = ddpagesize.SelectedItem.Text;
GridView1.DataBind();
}
protected void btnSearch_Click(object sender, EventArgs e)
{
SqlDataSource1.SelectCommand = "" + txtSearchValue.Text + "'";
GridView1.DataBind();
}
protected void btnReload_Click(object sender, EventArgs e)
{
txtSearchValue.Text = "";
lblSearchError.Text = "";
GridView1.DataBind();
}
protected override void Render(System.Web.UI.HtmlTextWriter writer)
{
foreach (GridViewRow row in GridView1.Rows)
{
if (row.RowType == DataControlRowType.DataRow)
{
row.Attributes["onmouseover"] =
"this.style.backgroundColor;this.style.backgroundColor='#AED4EB';";
row.Attributes["onmouseout"] =
"this.style.textDecoration='none';this.style.background='#ffffff';";
// Set the last parameter to True
// to register for event validation.
row.Attributes["onclick"] =
Page.ClientScript.GetPostBackClientHyperlink(GridView1,
"Select$" + row.DataItemIndex, true);
}
}
base.Render(writer);
}
protected void btnDate_Click(object sender, EventArgs e)
{
SqlDataSource1.SelectCommand = "";
GridView1.DataBind();
}
protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
{
try
{
int rowindex = GridView1.SelectedIndex % GridView1.PageSize;
GridViewRow row = GridView1.Rows[rowindex];
Session["TSO"] = row.Cells[7].Text.Trim();
string url = "http://localhost:60918/Requests.aspx";
StringBuilder sb = new StringBuilder();
sb.AppendLine("<script type='text/javascript'>");
sb.AppendLine("window.open('" + url + "')");
sb.AppendLine("<" + "/script>");
ScriptManager.RegisterStartupScript(upGrdCustomers, upGrdCustomers.GetType(), "myjs", sb.ToString(), false);
}
catch (System.Threading.ThreadAbortException)
{
throw;
}
}
受保护的无效页面加载(对象发送方,事件参数e)
{
}
受保护的无效ddPageSize\u SelectedIndexChanged(对象发送方,事件参数e)
{
//处理事件
DropDownList ddpagesize=发送方作为DropDownList;
GridView1.PageSize=Convert.ToInt32(ddpagesize.SelectedItem.Text);
ViewState[“PageSize”]=ddpagesize.SelectedItem.Text;
GridView1.DataBind();
}
受保护的无效BTN搜索单击(对象发送者,事件参数e)
{
SqlDataSource1.SelectCommand=“”+txtSearchValue.Text+“”;
GridView1.DataBind();
}
受保护的无效BTN重新加载\u单击(对象发送者,事件参数e)
{
txtSearchValue.Text=“”;
lblsearchror.Text=“”;
GridView1.DataBind();
}
受保护的覆盖无效渲染(System.Web.UI.HtmlTextWriter编写器)
{
foreach(GridView1.Rows中的GridViewRow行)
{
if(row.RowType==DataControlRowType.DataRow)
{
row.Attributes[“onmouseover”]=
“this.style.backgroundColor;this.style.backgroundColor='#AED4EB'”;
row.Attributes[“onmouseout”]=
“this.style.textDecoration='none';this.style.background='#ffffffff';”;
//将最后一个参数设置为True
//注册以进行事件验证。
row.Attributes[“onclick”]=
Page.ClientScript.GetPostBackClientHyperlink(GridView1,
“选择$”+row.DataItemIndex,true);
}
}
base.Render(writer);
}
受保护的无效数据\u单击(对象发送方,事件参数)
{
SqlDataSource1.SelectCommand=“”;
GridView1.DataBind();
}
受保护的void GridView1\u SelectedIndexChanged(对象发送方,事件参数e)
{
尝试
{
int rowindex=GridView1.SelectedIndex%GridView1.PageSize;
GridViewRow row=GridView1.Rows[rowindex];
会话[“TSO”]=行.Cells[7].Text.Trim();
字符串url=”http://localhost:60918/Requests.aspx";
StringBuilder sb=新的StringBuilder();
某人加上一行(“”);
sb.AppendLine(“窗口打开(“+url+”)”);
某人加上一行(“”);
ScriptManager.RegisterStartupScript(upGrdCustomers,upGrdCustomers.GetType(),“myjs”,sb.ToString(),false);
}
catch(System.Threading.ThreadAbortException)
{
投掷;
}
}
以下是我的GridView代码:
[ToolboxData("<{0}:GridView runat=server></{0}:GridView>")]
public class GridView : System.Web.UI.WebControls.GridView, IPageableItemContainer
{
/// <summary>
/// TotalRowCountAvailable event key
/// </summary>
private static readonly object EventTotalRowCountAvailable = new object();
/// <summary>
///
/// </summary>
/// <param name="dataSource"></param>
/// <param name="dataBinding"></param>
/// <returns></returns>
protected override int CreateChildControls(IEnumerable dataSource, bool dataBinding)
{
int rows = base.CreateChildControls(dataSource, dataBinding);
// if the paging feature is enabled, determine
// the total number of rows in the datasource
if (this.AllowPaging)
{
// if we are databinding, use the number of rows that were created,
// otherwise cast the datasource to an Collection and use that as the count
int totalRowCount = dataBinding ? rows : ((ICollection)dataSource).Count;
// raise the row count available event
IPageableItemContainer pageableItemContainer = this as IPageableItemContainer;
this.OnTotalRowCountAvailable(
new PageEventArgs(
pageableItemContainer.StartRowIndex,
pageableItemContainer.MaximumRows,
totalRowCount
)
);
// make sure the top and bottom pager rows are not visible
if (this.TopPagerRow != null)
{
this.TopPagerRow.Visible = false;
}
}
return rows;
}
#region IPageableItemContainer Interface
/// <summary>
///
/// </summary>
/// <param name="startRowIndex"></param>
/// <param name="maximumRows"></param>
/// <param name="databind"></param>
void IPageableItemContainer.SetPageProperties(
int startRowIndex, int maximumRows, bool databind)
{
int newPageIndex = (startRowIndex / maximumRows);
this.PageSize = maximumRows;
if (this.PageIndex != newPageIndex)
{
bool isCanceled = false;
if (databind)
{
// create the event args and raise the event
GridViewPageEventArgs args = new GridViewPageEventArgs(newPageIndex);
this.OnPageIndexChanging(args);
isCanceled = args.Cancel;
newPageIndex = args.NewPageIndex;
}
// if the event wasn't cancelled
// go ahead and change the paging values
if (!isCanceled)
{
this.PageIndex = newPageIndex;
if (databind)
{
this.OnPageIndexChanged(EventArgs.Empty);
}
}
if (databind)
{
this.RequiresDataBinding = true;
}
}
}
/// <summary>
///
/// </summary>
int IPageableItemContainer.StartRowIndex
{
get { return this.PageSize * this.PageIndex; }
}
/// <summary>
///
/// </summary>
int IPageableItemContainer.MaximumRows
{
get { return this.PageSize; }
}
/// <summary>
///
/// </summary>
event EventHandler<PageEventArgs> IPageableItemContainer.TotalRowCountAvailable
{
add { base.Events.AddHandler(GridView.EventTotalRowCountAvailable, value); }
remove { base.Events.RemoveHandler(GridView.EventTotalRowCountAvailable, value); }
}
/// <summary>
///
/// </summary>
/// <param name="e"></param>
protected virtual void OnTotalRowCountAvailable(PageEventArgs e)
{
EventHandler<PageEventArgs> handler = (EventHandler<PageEventArgs>)base.Events[GridView.EventTotalRowCountAvailable];
if (handler != null)
{
handler(this, e);
}
}
#endregion
}
[ToolboxData(“”)
公共类GridView:System.Web.UI.WebControl.GridView,IPageableItemContainer
{
///
///TotalRowCountAvailable事件键
///
私有静态只读对象EventTotalRowCountAvailable=新对象();
///
///
///
///
///
///
受保护的重写int CreateChildControls(IEnumerable数据源,布尔数据绑定)
{
int rows=base.CreateChildControls(数据源,数据绑定);
//如果已启用分页功能,请确定
//数据源中的行总数
如果(此.允许分页)
{
//如果要进行数据绑定,请使用创建的行数,
//否则,将数据源强制转换为集合并将其用作计数
int totalRowCount=数据绑定?行:((ICollection)数据源).Count;
//引发行计数可用事件
IPageableItemContainer pageableItemContainer=此为IPageableItemContainer;
此.ontotalRowCount可用(
新页面事件参数(
pageableItemContainer.StartRowIndex,
pageableItemContainer.MaximumRows,
总行数
)
);
//确保顶部和底部寻呼机行不可见
如果(this.TopPagerRow!=null)
{
this.TopPagerRow.Visible=false;
}
}
返回行;
}
#区域IPageableItemContainer接口
///
///
///
///
///
///
作废IPageableItemContainer.SetPageProperties(
int startRowIndex,int maximumRows,布尔数据绑定)
{
int newPageIndex=(startRowIndex/maximumRows);
this.PageSize=最大行数;
if(this.PageIndex!=newPageIndex)
{
bool isCanceled=false;
如果(数据绑定)
{
//创建事件参数并引发事件
GridViewPageEventArgs args=新的GridViewPageEventArgs(newPageIndex);
此.OnPageIndexChanging(args);
isCanceled=args.Cancel;
newPageIndex=args.newPageIndex;
}
//如果活动没有取消
//继续并更改分页值
如果(!已取消)
{
this.PageIndex=newPageIndex;
如果(数据绑定)
{
this.OnPageIndexChanged(EventArgs.Empty);
}
}
如果(数据绑定)
{
this.RequiresDataBinding=true;
}
}
}
///
///
///
int IPageableItemContainer.StartRowIndex
{
获取{返回this.PageSize*this.PageIndex;}
}
///
///
///
int IPageableItemContainer.MaximumRows
{
获取{返回this.PageSize;}
}
///
protected void ddPageSize_SelectedIndexChanged(object sender, EventArgs e)
{
// handle event
DropDownList ddpagesize = sender as DropDownList;
GridView1.PageSize = Convert.ToInt32(ddpagesize.SelectedItem.Text);
ViewState["PageSize"] = ddpagesize.SelectedItem.Text;
SqlDataSource1.SelectCommand = "" + txtSearchValue.Text + "'";
GridView1.DataBind();
}