2016-04-20 11 views
0

私は、ジョブの数とXDAと呼ばれるドキュメントの数を示すGridViewを持っています。第3列のEPODでは、XDAを引いたジョブでこれを計算したいと思います。2つの他の行に基づいてGridViewの行を計算する

のGridView:背後

<asp:GridView runat="server" 
           id="gvResults" 
           CssClass="tblResults" 
           OnItemDataBound="gvResults_OnItemDataBound" 
           AllowSorting="true" 
           OnSortCommand="gvResults_Sort" 
           DataKeyField="ID" 
           AutoGenerateColumns="false"> 
          <HeaderStyle CssClass="tblResultsHeader" /> 
          <AlternatingRowStyle BackColor="#EEEEEE" /> 
           <Columns> 
            <asp:BoundField DataField="JobsDelivered" HeaderText="No. Jobs deliv" SortExpression="JobsDelivered"></asp:BoundField> 
            <asp:BoundField DataField="ePODXDA" HeaderText="ePOD XDA" SortExpression="ePODXDA"></asp:BoundField> 

コード:

protected void gvResults_OnItemDataBound(object sender, GridViewRowEventArgs e) 
    { 
     if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
      LookupLeagueTable main = (LookupLeagueTable)e.Row.DataItem; 
      GridView gv = (GridView)sender; 

     } 
    } 

だから私はこれを使用してみましたが、コードは、foreachの中で立ち往生:

foreach (DataRow row in e.Row.Cells) 
{ 
    row["EPOD"] = Convert.ToInt32(row["JobsDelivered"]) - Convert.ToInt32(row["ePODXDA"]); 
} 

は私もmain.EPOD = main.JobsDelivered - main.ePODXDA;を試みたが、グリッドはまだグリッドを移植ゼロ

を表示:

List<LookupLeagueTable> main = LookupLeagueTable.SearchCustomerListItems(Company.Current.CompanyID, 
        SearchStrings, 
        SearchFields, 
        DateTypeKey, 
        FromDate, 
        ToDate, 
        SortExpression, 
        SortDirection); 



     gvResults.DataSource = main; 
     gvResults.DataBind(); 

SearchCustomerListItemsをして、SQL文を実行します:

select 
     sum(case when (select count(distinct j.ID) from job_new j where jn.ID = j.ID AND j.JobOwnerID = j.DeliverMemberID)>0 then 1 else 0 end) as JobsDelivered, 
     sum(case when (select count(jds.EPODImage) from job_dockets jds where jds.jobid=jn.id)>0 then 1 else 0 end) as ePODXDA 
    FROM customer c 
    LEFT JOIN job_address ja ON c.AccountCode = ja.Code AND c.Company_ID = ja.Company_ID 
    JOIN AddressType jat ON ja.AddressType = jat.ID and jat.Description = 'Debtor' 
    LEFT JOIN job_new jn ON ja.JobID = jn.ID 
    WHERE jn.IsActive = 1 
+0

を、あなたはどのように移入んグリッド ? – Mainak

+0

@Mainakコードを表示するために私の質問を編集しました – user123456789

答えて

0

あなたが適応できる多くの方法があります。この単純なコードはあなたを助けるかもしれない試してみてください:

3番目の列の代わりに、テンプレートフィールドを追加します。予想通り

<asp:TemplateField HeaderText="EPOD"> 
<ItemTemplate> 
    <asp:Lable runat="server" ID="lblEpod"> 
</ItemTemplate> 
</asp:TemplateField> 

その後OnRowDataBoundあなたがフィールドを計算することができます:

protected void OnRowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     int no_job = Convert.ToInt32(e.Row.Cells[0].Text); // as your No of Job is at 0 place of Gridview 
     int XDA = Convert.ToInt32(e.Row.Cells[1].Text); 
     Lable lblEpod = e.Row.FindControl("lblEpod") as Lable; 
     lblEpod.Text = Convert.ToString(no_job - XDA); 
    } 
} 
関連する問題