1

リンク ボタンを使用して、グリッド ビューから選択したレポート ID の PDF レポートを表示しています。ページの読み込み時に、データソースを Gridview にバインドしています。リンク ボタンをクリックすると、列 0 から正しいレポート ID が取得され、レポートが表示されます。グリッドを並べ替えた後、並べ替えられたデータがグリッド ビューに表示されます。リンクボタンをクリックすると、列0から変更された値が選択されません。代わりに、ソートされる前の値が選択されます。

説明: 並べ替え前の列 0 の値は 1、2、3、4、5 です。並べ替える前に行 3 のリンク ボタンをクリックすると、列 0 から値 3 が選択されます。並べ替え後は 3,4,5,2,1 です。行 3 のリンク ボタンをクリックしても、5 ではなく値 3 が選択されます。助けてください。

以下は私のコードです:aspx:

CS:

protected void Page_Load(object sender, EventArgs e)
{
     bindGrid();
}
protected void GvStockTakingReport_Sort(object sender, GridViewSortEventArgs e)
    {

            GvStockTakingReport.DataSource = null;
            GvStockTakingReport.DataBind();
            GvStockTakingReport.Dispose();
            DataSet ds = StockTakingList.BindStocktakingReportGrid();
            DataTable dtSortTable = ds.Tables[0];
            if (dtSortTable != null)
            {
                DataView dv = new DataView(ds.Tables[0]);
                dv.Sort = e.SortExpression + " " + getSortDirectionString();
                //ViewState["sortExpression"] = e.SortExpression;
                //Session["sortExpression"] = e.SortExpression;
                GvStockTakingReport.DataSource = dv;
                GvStockTakingReport.DataBind();
            }                      
       }

   protected void PrintReport(object sender, CommandEventArgs e)
    {

            LinkButton lkButton = (LinkButton)sender;
            GridViewRow item = (GridViewRow)lkButton.NamingContainer;

            string Id = (item.FindControl("lblstk_id") as Label).Text;

            //Getting value for Id    
            string Id1 = e.CommandArgument.ToString();


            int rowIndex = Convert.ToInt32((string)e.CommandArgument);


            //string Id1 = Convert.ToString(GvStockTakingReport.Rows[rowIndex].Cells[0].Text);

            string Id2 = ((Label)(GvStockTakingReport.Rows[rowIndex].FindControl("lblstk_id"))).Text;

            //Getting value for Id

            string virtualPath = string.Format("~/{0}/{1}{2}", Portal.Business, Portal.Core.Profile.ReportsDirectory, "General/RPT_03002_StockTakinReport.rpt");
            string physicalPath = Server.MapPath(virtualPath);

            using (ReportDocument report = new ReportDocument())
            {
                report.Load(physicalPath);
                Core.Security.CrystalReportLogOn(report, (SqlConnectionStringBuilder)Portal.Core.Profile.ConnectionStrings["MTServer"]);
                report.SetParameterValue("@STK_Id", Id);
                report.ExportToHttpResponse(ExportFormatType.PortableDocFormat, Page.Response, true, "Stock Taking report");
            }          
    }
4

1 に答える 1

0

問題は、リンクボタンをクリックするたびに、ページの読み込みが bindgrid メソッドを呼び出し、printreport メソッドが呼び出される前にグリッドビューを元の並べ替えにリセットすることでした。bindgrid メソッドと以下に並べ替えロジックを含めて、問題を解決しました。

   public void bindGrid()
    {
        try
        {
            DataSet ds = StockTakingList.BindStocktakingReportGrid();
            GvStockTakingReport.DataSource = ds;
            GvStockTakingReport.DataBind();

            //To make sure the grid remains with sorting order while pageload method invokes otherwise it will reset to original order
            DataView dv = new DataView(ds.Tables[0]);
            if (dv != null)
            {
                if (ViewState["sortExpression"] == null)
                {
                    ViewState["sortExpression"] = "STK_Id"; //First time it will sort by STK_ID i.e on first time page loading
                }

                if (ViewState["sortDirection"] == null)
                {
                    ViewState["sortDirection"] = "ASC";//First time it will sort ascending i.e on first time page loading
                }

                dv.Sort = ViewState["sortExpression"].ToString() + " " + ViewState["sortDirection"].ToString();
                GvStockTakingReport.DataSource = dv;
                GvStockTakingReport.DataBind();
            }
        }
        catch (Exception ex)
        {
            error.Visible = true;
            error.Text = ex.Message.ToString();
        }
    }
于 2013-02-14T07:27:06.297 に答える