这项目是以前开发的,我进来修改代码时发现,他们所有页面都用一个用户控件,用户控件里有个gridview,并且绑定数据时,不是用代码绑定,而是用ObjectDataSource控件绑定,蛋疼的事情来了,他们在gridview里做了点击列头排序的功能,但是点击列头排序只能对当前页排序(这是gridview默认的),现在要多所有数据进行排序,我看了半天代码,没看明白到底要怎么改,我贴出部分代码出来吧。
1. 用户控件(ascx文件)里gridview排序代码如下: protected void pvgrid_Sorting(object sender, GridViewSortEventArgs e)
{
sortexp = e.SortExpression;
if (sortexp == DefaultSortExpression && FirstLoad == "0")
{
sortdir = ((SortDirection)(((int)e.SortDirection) ^ 1)).ToString();
}
else
{
sortdir = e.SortDirection.ToString();
FirstLoad = "1";
}
this.GetPage();
} private void GetPage()
{
BeginEventHandler beh = new BeginEventHandler(BeginAsync);
EndEventHandler eeh = new EndEventHandler(EndAsync);
PageAsyncTask pat = new PageAsyncTask(beh, eeh, null, null, true);
this.Page.RegisterAsyncTask(pat);
this.Page.ExecuteRegisteredAsyncTasks();
}
就这几句代码,你要我如何下手改咯,求高手指点,能不能不改动数据库中的存储过程,之间在代码中用linq进行所有数据排序功能?linq没怎么用过,望大虾帮忙啊……
1. 用户控件(ascx文件)里gridview排序代码如下: protected void pvgrid_Sorting(object sender, GridViewSortEventArgs e)
{
sortexp = e.SortExpression;
if (sortexp == DefaultSortExpression && FirstLoad == "0")
{
sortdir = ((SortDirection)(((int)e.SortDirection) ^ 1)).ToString();
}
else
{
sortdir = e.SortDirection.ToString();
FirstLoad = "1";
}
this.GetPage();
} private void GetPage()
{
BeginEventHandler beh = new BeginEventHandler(BeginAsync);
EndEventHandler eeh = new EndEventHandler(EndAsync);
PageAsyncTask pat = new PageAsyncTask(beh, eeh, null, null, true);
this.Page.RegisterAsyncTask(pat);
this.Page.ExecuteRegisteredAsyncTasks();
}
就这几句代码,你要我如何下手改咯,求高手指点,能不能不改动数据库中的存储过程,之间在代码中用linq进行所有数据排序功能?linq没怎么用过,望大虾帮忙啊……
解决方案 »
- web线程问题
- 安装 Sql server 2000问题
- 下拉菜单的问题
- 哪里有VFP7.0下载啊,请大家帮帮忙啊!
- 整个应用程序保持一个始终Open的数据连接好呢?还是执行SQL语句的时候打开一个连接执行完后马上关闭的好?请指教.
- Access 数据库中如何使用存储过程
- 做一个web自定义控件用到javascript时遇到问题
- Visual Studio开发环境的菜单“框架”下拉内容总是灰白,怎样才能使用?
- 怎么能在新照片上传成功后立即显示新照片,无需刷新
- 杀了中央五套的两个世界杯主持人!
- asp.net不用控件有什么方法可以后台保存指定的文件(知道文件路径)
- 未在本地计算机上注册“Microsoft.Jet.OLEDB.12.0”提供程序
//保存当前状态
string sort = string.Empty;
//更改状态
if (chkSortDirection.Checked)
{
sort = "asc";
chkSortDirection.Checked = false;
}
else
{
sort = "desc";
chkSortDirection.Checked = true;
}
tbSortExpress.Text = e.SortExpression;
foreach (DataControlField dcf in this.CustGridView1.Columns)
{
if (dcf.SortExpression == e.SortExpression)
{
if (sort == "desc")
dcf.HeaderStyle.CssClass = "tblSortDESC";
else
dcf.HeaderStyle.CssClass = "tblSortASC";
}
else
{
dcf.HeaderStyle.CssClass = "viewTr";
}
}
this.BindGrid(); //重新绑定
实现步骤:页面放置一个隐藏的控件记录当前的排序状态,然后点击排序的时候拼接sql进行排序,仅供参考。
你这样不行啊,这样做的话我当然知道,问题是我现在的代码时这样的: <control:GridView ID="pvgrid" runat="server" OnPageIndexChanging="PageIndexChanging"
AutoGenerateColumns="False" AllowSorting="True" CssClass="tablestyle" AllowPaging="True"
HeaderStyle-Wrap="False" DataSourceID="PageViewSource" OnRowCreated="pvgrid_RowCreated"
OnSorting="pvgrid_Sorting" OnRowDataBound="pvgrid_RowDataBound">
<AlternatingRowStyle CssClass="altrowstyle" />
<EmptyDataRowStyle BackColor="#EDF5FF" Height="300px" VerticalAlign="Middle" HorizontalAlign="Center" />
<EmptyDataTemplate>
没有找到记录</EmptyDataTemplate>
<HeaderStyle CssClass="headerstyle" />
<PagerTemplate>
</PagerTemplate>
<RowStyle CssClass="rowstyle" Wrap="False" />
</control:GridView><asp:ObjectDataSource ID="PageViewSource" runat="server" EnablePaging="True" TypeName="Fujitsu.IBD.ScannerWarranty.View.Control.PageViews"
SelectMethod="GetRows" SelectCountMethod="GetCount"></asp:ObjectDataSource>
我要怎么在这基础上改,他都用了ObjectDataSource来绑定gridvew的数据,郁闷起~~~