Mar*_*son 20 c# asp.net gridview
我使用ASP.NET 4.0与C#(Visual Web Developer 2010 Express).
我已成功设法使用声明性ASP.NET代码实现绑定到存储过程数据源的简单GridView,如下所示:
<asp:GridView
ID="grdTrades"
runat="server"
DataKeyNames="tradeId"
EnablePersistedSelection="true"
SelectedRowStyle-BackColor="Yellow"
AllowPaging="true"
AllowSorting="true"
PageSize = "20"
AutoGenerateColumns="false"
DataSourceID="sdsTrades"
>
<Columns>
<asp:CommandField ShowSelectButton="true" ButtonType="Link" SelectText="Select" />
<asp:BoundField DataField="tradeId" HeaderText="TradeId" ReadOnly="True" SortExpression="tradeId" />
< ... more columns ... >
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="sdsTrades" runat="server"
ConnectionString="<%$ ConnectionStrings:TradesDB %>"
ProviderName="<%$ ConnectionStrings:Trades.ProviderName %>"
SelectCommand="usp_GetTrades" SelectCommandType="StoredProcedure">
</asp:SqlDataSource>
Run Code Online (Sandbox Code Playgroud)
它工作得很好,包括分页和排序.我想删除SqlDataSource并使用代码隐藏(我试图将数据库访问代码放在一个地方).到目前为止,我在我的代码隐藏中有这个:
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
grdTrades.SelectedIndex = 0;
DBUtil DB = new DBUtil();
grdTrades.DataSource = DB.GetTrades();
grdTrades.DataKeyNames = new string[] { "tradeId" };
grdTrades.DataBind();
}
}
// this is needed otherwise I get "The GridView 'grdTrades' fired event PageIndexChanging which wasn't handled."
void grdTrades_PageIndexChanging(Object sender, GridViewPageEventArgs e)
{
grdTrades.PageIndex = e.NewPageIndex;
grdTrades.DataBind();
}
Run Code Online (Sandbox Code Playgroud)
我的声明代码现在看起来像:
<asp:GridView
ID="grdTrades"
runat="server"
EnablePersistedSelection="true"
SelectedRowStyle-BackColor="Yellow"
AllowPaging="true"
AllowSorting="true"
PageSize = "20"
AutoGenerateColumns="false"
OnPageIndexChanging="grdTrades_PageIndexChanging"
>
<Columns>
<asp:CommandField ShowSelectButton="true" ButtonType="Link" SelectText="Select" />
<asp:BoundField DataField="tradeId" HeaderText="TradeId" ReadOnly="True" SortExpression="tradeId" />
< ... more columns ... >
</Columns>
</asp:GridView>
Run Code Online (Sandbox Code Playgroud)
问题是,当我点击页码时,页面变为空白.我还想实现排序,但希望首先使分页工作.请帮忙.
谢谢
Jam*_*mie 29
每次更改页面时都需要绑定GridView.
例如:
void grdTrades_PageIndexChanging(Object sender, GridViewPageEventArgs e)
{
grdTrades.DataSource = DB.GetTrades();
grdTrades.PageIndex = e.NewPageIndex;
grdTrades.DataBind();
}
Run Code Online (Sandbox Code Playgroud)
我的建议是将结果存储DB.GetTrades()在ViewState(或Cache)中,这样每次更改页面时都不需要访问数据库.
但是,在执行此操作时,排序会变得非常困难.
您始终可以使用ObjectDataSource而不是SqlDatasource.然后,您可以指向ObjectDataSource来查看您的DB.GetTrades()函数.排序和分页将自动运行.
希望有所帮助.