2016-04-20 12 views
0

Ich habe eine GridView, die die Anzahl der Aufträge und Anzahl der Dokumente namens XDA zeigt. In der dritten Spalte namens EPOD möchte ich dies mit den Jobs minus XDA berechnen.Berechnen Sie Zeile in GridView basierend auf zwei anderen Zeilen

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> 

-Code hinter:

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

     } 
    } 

Also habe ich versucht, dies mit aber der Code wird in der foreach stecken:

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

Ich habe auch versucht main.EPOD = main.JobsDelivered - main.ePODXDA; aber das Gitter angezeigt noch Null

Netz Bestücken:

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



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

SearchCustomerListItems dann eine SQL-Anweisung ausgeführt wird:

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

wie wollen Sie bevölkern das Gitter ? – Mainak

+0

@Mainak Ich habe meine Frage bearbeitet, um den Code anzuzeigen – user123456789

Antwort

0

Es gibt viele Möglichkeiten, wie Sie anpassen können. Versuchen Sie, diese einfachen Code aus kann Ihnen helfen:

ein Template-Feld anstelle der dritten Spalte hinzufügen:

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

Dann OnRowDataBound Sie Feld berechnen konnte wie erwartet:

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); 
    } 
} 
Verwandte Themen