比如我有一个GridView的用户控件里面是自己写的数据库的分页,然后每项前面都有一个选定框。
在分页以后我要记录以前选定的值,有什么方法可以实现的吗?????
各位大虾帮帮忙啦然后我想用户自己能调整GirdView各个列排列的顺序,要怎么弄啊~~~
在分页以后我要记录以前选定的值,有什么方法可以实现的吗?????
各位大虾帮帮忙啦然后我想用户自己能调整GirdView各个列排列的顺序,要怎么弄啊~~~
调试欢乐多
不知道对不对
先可以从客户端记录checked值: 比如:
a.aspx: <script language="javascript" type="text/javascript">
//得到数据
var Hnum='<%=UInum%>';
var pagenum='<%=pagenum%>';//记录翻页页码
var sid=new Array(Hnum);//sid记录数组//UseId UInum
var Hsid=' <%=UseId%>';
sid = Hsid.split(" ¦");
var Ysid="";
function link(str)
{
CheckAll();
if(str == "1")
{
location.href="a.aspx?sid=" + Ysid + "&pagenum=" +pagenum+ "&is=1"; //有is参数决定怎么样回传
}
else if(str == "0")
{
location.href="a.aspx?sid=" + Ysid + "&pagenum=" +pagenum+ "&is=0";
}
}
function CheckAll()
{
var inputs=document.getElementsByTagName("input");
var isfirst="0";
for(var i=0;i <inputs.length;i++)
{
if(inputs[i].type=="checkbox")
{
if(inputs[i].checked)
{
if(isfirst=="0")
{
Ysid += inputs[i].value;
}
else
{
Ysid = Ysid + " ¦" + inputs[i].value;
}
isfirst="1";
}
}
}
}
</script>
然后你要记录分页前的页码,这个简单,因为你是自定义分页,可以这样做:
protected string pagenum;//定义为页码#region GridView1页码跳转
protected void link_next_Click(object sender, EventArgs e)
{
if (GridView1.PageIndex < GridView1.PageCount)
GridView1.PageIndex++;
CheckPager();
ShowPageIndex();
GridBind();
} protected void linke_pre_Click(object sender, EventArgs e)
{
if (GridView1.PageIndex > 0)
GridView1.PageIndex--;
CheckPager();
ShowPageIndex();
GridBind();
} protected void link_frist_Click(object sender, EventArgs e)
{
GridView1.PageIndex = 0;
CheckPager();
ShowPageIndex();
GridBind();
} protected void link_last_Click(object sender, EventArgs e)
{
GridView1.PageIndex = GridView1.PageCount - 1;
CheckPager();
ShowPageIndex();
GridBind();
} protected void img_goto_Click(object sender, ImageClickEventArgs e)
{
int page_num = 0;
if (this.txt_pagenum.Text != string.Empty)
{
try
{
page_num = Convert.ToInt32(this.txt_pagenum.Text);
if (page_num > 0 && page_num <= GridView1.PageCount)
this.GridView1.PageIndex = page_num - 1;
}
catch
{
page_num = this.GridView1.PageIndex;
}
CheckPager();
ShowPageIndex();
GridBind();
}
}
public void ShowPageIndex()
{
if (this.GridView1 != null)
{
this.img_goto.Enabled = true;
if (this.GridView1.PageCount != 0)
{
pagenum = Convert.ToString(GridView1.PageIndex + 1);//给参数赋页码值
this.lab_pageindex.Text = Convert.ToString(GridView1.PageIndex + 1) + "/" + this.GridView1.PageCount.ToString();
this.img_goto.Enabled = true;
}
else
{
pagenum = Convert.ToString(GridView1.PageIndex + 1);//给参数赋页码值
this.lab_pageindex.Text = Convert.ToString(GridView1.PageIndex) + "/" + this.GridView1.PageCount.ToString();
this.img_goto.Enabled = false;
} //this.txt_pagenum.Text = Convert.ToString(GridView1.PageIndex + 1);
CheckPager();
}
else
{
this.lab_pageindex.Text = "0/0";
this.img_goto.Enabled = false;
this.link_frist.Enabled = false;
this.linke_pre.Enabled = false;
this.link_next.Enabled = false;
this.link_last.Enabled = false;
this.img_goto.Enabled = false;
}
}
private void CheckPager()
{
if (GridView1.PageIndex <= 0)
{
this.link_frist.Enabled = false;
this.linke_pre.Enabled = false;
}
else
{
this.link_frist.Enabled = true;
this.linke_pre.Enabled = true;
}
if (GridView1.PageIndex >= GridView1.PageCount - 1)
{
this.link_next.Enabled = false;
this.link_last.Enabled = false;
}
else
{
this.link_next.Enabled = true;
this.link_last.Enabled = true;
}
}
#endregion
a.aspx.cs:
[code=HTML]
a.aspx.cs: protected string pagenum = "0";//页码数
protected string UserSid = "";//用户sid
protected string UserIs = "";
protected void Page_Load(object sender, EventArgs e)
{ try
{
UserSid = Request.QueryString["sid"].ToString();
pagenum = Request.QueryString["pagenum"].ToString();
UserIs = Request.QueryString["is"].ToString();
}
catch
{
UserSid = "";
pagenum = "0";
UserIs = "";
} if (!IsPostBack)
{
string strcom = "select * from CompanyDet";
string strrol = "select UserInfo.USERID,Roles.ROLENAME from UserInfo,USER2ROLE,Roles where UserInfo.USERID = USER2ROLE.USERID and USER2ROLE.ROLEID = Roles.ROLEID";
ConnectDDList(strcom, "COMNAME", "SID", this.ddlcompany);
ConnectDDList(strrol, "ROLENAME", "USERID", this.ddltype);
GridView1.DataKeyNames = new string[] { "SID" };
GridBind();
ShowPageIndex();
CheckPager();
if ((Convert.ToInt32(pagenum) != 0) && (UserNum.Equals("all")))
{
GridBind();
if (UserSid != "")
{
USID = UserSid.Split(new char[1] { '|' });
if (UserIs.Equals("1"))
{
for (int i = 0; i < USID.Length; i++)
{
string sql = "update USERINFO set ISUSING = " + Convert.ToInt16(UserIs.Trim()) + " where SID = " + Convert.ToInt16(USID[i]);
DataCom(sql);
}
}
else if (UserIs.Equals("0"))
{
for (int i = 0; i < USID.Length; i++)
{
string sql = "update USERINFO set ISUSING = " + Convert.ToInt16(UserIs.Trim()) + " where SID = " + Convert.ToInt16(USID[i]);
DataCom(sql);
}
}
this.txt_pagenum.Text = pagenum;
int page_num = 0;
if (this.txt_pagenum.Text != string.Empty)
{
try
{
page_num = Convert.ToInt32(this.txt_pagenum.Text);
if (page_num > 0 && page_num <= GridView1.PageCount)
this.GridView1.PageIndex = page_num - 1;
}
catch
{
page_num = this.GridView1.PageIndex;
}
CheckPager();
ShowPageIndex();
GridBind();
this.txt_pagenum.Text = "";
}
}
else
{
ShowPageIndex();
CheckPager();
}
}
else if ((Convert.ToInt32(pagenum) != 0) && (UserNum.Equals("one")))
{
GridBind();
if (UserSid != "")
{
if (UserIs.Equals("1"))
{
string sql = "update USERINFO set ISUSING = " + Convert.ToInt16(UserIs.Trim()) + " where SID = " + Convert.ToInt16(UserSid);
DataCom(sql);
}
else if (UserIs.Equals("0"))
{
string sql = "update USERINFO set ISUSING = " + Convert.ToInt16(UserIs.Trim()) + " where SID = " + Convert.ToInt16(UserSid);
DataCom(sql);
}
this.txt_pagenum.Text = pagenum;
int page_num = 0;
if (this.txt_pagenum.Text != string.Empty)
{
try
{
page_num = Convert.ToInt32(this.txt_pagenum.Text);
if (page_num > 0 && page_num <= GridView1.PageCount)
this.GridView1.PageIndex = page_num - 1;
}
catch
{
page_num = this.GridView1.PageIndex;
}
CheckPager();
ShowPageIndex();
GridBind();
this.txt_pagenum.Text = "";
}
}
else
{
ShowPageIndex();
CheckPager();
}
}
else
{
GridBind();
ShowPageIndex();
CheckPager();
}
}
}这样就解决了!下面pageload事件我自己程序里的,所以没怎么改,不过思路在这!
foreach (GridViewRow row in GridView1)
{
//获取GridView1行中的CheckBox控件
CheckBox chk = (CheckBox)row.Cells["CheckBox控件所在列索引"].FindControl("chkBox");
if (chk.Checked)
{
//记录选中行
}
}2.使用DataView对各列进行排序//获取原始数据
DataSet ds = GetMyData();
DataView dv =ds.Tables[0].DefaultView;
//按ID降序排列
dv.Sort = "order by id desc";
你可以把dataset缓存起来,作为一个数据源来实现你要的那些功能;
使用viewstate存储ds,currentpagenum;prepagenum ;nextpagenum;然后再ds.tables[""].defaultview使用条件过滤;使用sort调整顺序;
你没有必要重写的,
http://dotnet.aspx.cc/ShowDetail.aspx?id=F43AF9A5-2C2E-4AA6-E976-21E9569F5A8A
----------------------------------------
不可能损失的~
{
//在这个方法中把选中的记录下来
// 然后调用
Bind();
}
protected void SetDS()
{
/**************
* 这个方法是从数据
* 库中取出需要的纪录
* 这个应该很简单的
* ***********/
}
DataSet DataSourceds ;
DataSet Bdds;
int CurrentPageNum;
int PageSize=15;
int RecordSize;
protected void CreatDataSet()
{
DataSourceds = Cache.Get("Source");
if (DataSourceds == null)
{
DataSourceds = SetDS();//这个是使用数据库填充ds然后保存到cache中
Cache.Insert("Source", DataSourceds);
}
RecordSize = DataSourceds.Tables[0].Rows.Count;
}
protected DataSet Page()
{
CreatDataSet();
int StartNum = PageSize * CurrentPageNum + 1;
int EndNum = StartNum + 15;
if (RecordSize < EndNum)
{
EndNum = RecordSize;
}
Bdds.Tables.Clear();
for (int i = StartNum; i < EndNum ; i++)
{
Bdds.Tables[0].ImportRow(DataSourceds.Tables[0].Rows[i]);
}
return Bdds;
}
protected void Bind()
{
DataSet ds = Page();
ds.Tables[0].DefaultView.Sort = "";//填写排序的列名 和asc desc
this.GridView1.DataSource = ds.Tables[0].DefaultView;
this.GridView1.DataBind();
}