Как вычислить текущую сумму столбца в gridview, когда столбец add dyanamicly on checkboxlist selected event change in C# using cells
Я работаю над школьным ERP-проектом в качестве ASP.NET веб-приложение, в котором у нас есть gridview. На моей странице Я хочу вычислить сумму значений ячеек по строкам gridview, но код, который я использую, возвращает в два или три раза больше суммы конкретного столбца. Есть какие-нибудь предложения о том, как мы можем рассчитать правильную сумму конкретного столбца?
Примечание: - здесь у нас есть один список чекбоксов, который заполняется из базы данных, а элемент chekboxlist - это столбец gridview, когда мы проверили элемент в chekboxlist, столбец динамически добавляет gridview, а когда мы проверили второй элемент в cheboxlist, то второй столбец добавил int gridview, как показано на моем рисунке
http://i.stack.imgur.com/WOzgD.png[^]
мой желаемый результат (выход)
http://i.stack.imgur.com/tqMav.png[^]
мой код c#.
using System; using System.Collections; using System.Configuration; using System.Data; using System.Linq; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Xml.Linq; using System.Data.SqlClient; namespace egurukul { public partial class feerecipts : System.Web.UI.Page { decimal val; string _connStr = ConfigurationManager.ConnectionStrings["con1"].ConnectionString; protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { bindgvfeehead(); BindTableColumns(); } } private void BindTableColumns() { DataTable table = new DataTable(); using (SqlConnection conn = new SqlConnection(_connStr)) { SqlCommand cmd = new SqlCommand("Readduedat", conn); cmd.CommandType = CommandType.StoredProcedure; // get the adapter object and attach the command object to it SqlDataAdapter ad = new SqlDataAdapter(cmd); // fire Fill method to fetch the data and fill into DataTable ad.Fill(table); } chbxlstduedate.DataSource = table; chbxlstduedate.DataTextField = "duemonth"; chbxlstduedate.DataValueField = "duedateid"; chbxlstduedate.DataBind(); } public void bindgvfeehead() { SqlConnection con = new SqlConnection(); con.ConnectionString = ConfigurationManager.ConnectionStrings["con1"].ConnectionString; con.Open(); SqlCommand cmd = new SqlCommand(); cmd.CommandText = "readfeehead"; cmd.CommandType = CommandType.StoredProcedure; cmd.Connection = con; cmd.Parameters.AddWithValue("@classname", Convert.ToString(ddlclassname.SelectedItem)); cmd.Parameters.AddWithValue("@feecatename", Convert.ToString(ddlstcategory.SelectedItem)); SqlDataAdapter da = new SqlDataAdapter(cmd); DataTable table = new DataTable(); da.Fill(table); gvfeehead.DataSource = table; gvfeehead.DataBind(); con.Close(); } private void GetData() { DataTable table = new DataTable(); // get the connection SqlConnection conn = new SqlConnection(_connStr); conn.Open(); SqlCommand cmd = new SqlCommand(); cmd.Connection = conn; cmd.CommandText = "readfeedetails"; cmd.CommandType = CommandType.StoredProcedure; // instantiate the command object to fire cmd.Parameters.AddWithValue("@classname", Convert.ToString(ddlclassname.SelectedItem)); cmd.Parameters.AddWithValue("@feecatename", Convert.ToString(ddlstcategory.SelectedItem)); SqlDataAdapter ad = new SqlDataAdapter(cmd); // fire Fill method to fetch the data and fill into DataTable ad.Fill(table); conn.Close(); // specify the data source for the GridView GridView1.DataSource = table; // bind the data now GridView1.DataBind(); } protected void chbxlstduedate_SelectedIndexChanged(object sender, EventArgs e) { foreach (ListItem item in chbxlstduedate.Items) { if (item.Selected) { BoundField b = new BoundField(); b.DataField = item.Text; b.HeaderText = item.Text; GridView1.Columns.Add(b); } } TemplateField tfield = new TemplateField(); tfield.HeaderText = "Total"; GridView1.Columns.Add(tfield); this.GetData(); bindgvfeehead(); } protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) { for (int i = 0; i < GridView1.Rows.Count; i++) { int j; double Total = 0.00; for (j = 0; j < GridView1.Columns.Count; j++) { Total += GridView1.Rows[i].Cells[j].Text != " " ? double.Parse(GridView1.Rows[i].Cells[j].Text) : 0.000; } int k = Convert.ToInt32(GridView1.Columns.Count); GridView1.Rows[i].Cells[k - 1].Text = Total.ToString("#0.000"); } } } }
мой код aspx
<div style="float:left"> <asp:GridView ID="gvfeehead" runat="server" AutoGenerateColumns="False" BackColor="White" BorderColor="#336666" BorderStyle="Double" Font-Size="11px" BorderWidth="3px" CellPadding="4" GridLines="both" ShowFooter="True"> <RowStyle ForeColor="#333333" BackColor="White" Height="20px" /> <Columns> <asp:TemplateField> <HeaderTemplate>Sr.No </HeaderTemplate> <ItemTemplate> <%#Container.DataItemIndex+1 %></ItemTemplate> </asp:TemplateField> <asp:TemplateField> <HeaderTemplate>Fee Name </HeaderTemplate> <ItemTemplate> <asp:Label ID="lblfeename" runat="server" Text='<%#Eval("feename") %>'></asp:Label> </ItemTemplate> <FooterTemplate> <asp:Label ID="lblfeename" CssClass="footer_text" runat="server" Text="Total"></asp:Label></FooterTemplate> </asp:TemplateField> </Columns> <FooterStyle BackColor="White" ForeColor="#333333" /> <PagerStyle BackColor="#336666" ForeColor="White" HorizontalAlign="Center" /> <SelectedRowStyle BackColor="#339966" Font-Bold="True" ForeColor="White" /> <HeaderStyle BackColor="#336666" Font-Bold="True" ForeColor="White" /> </asp:GridView> </div> <div> <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" BackColor="White" BorderColor="#336666" BorderStyle="Double" Font-Size="11px" BorderWidth="3px" CellPadding="4" GridLines="both" ShowFooter="True" EnableViewState="false" onrowdatabound="GridView1_RowDataBound"> <RowStyle ForeColor="#333333" BackColor="White" Height="21px" /> <Columns> </Columns> <FooterStyle BackColor="White" ForeColor="#333333" Font-Bold="true" /> <PagerStyle BackColor="#336666" ForeColor="White" HorizontalAlign="Center" /> <SelectedRowStyle BackColor="#339966" Font-Bold="True" ForeColor="White" /> <HeaderStyle BackColor="#336666" Font-Bold="True" ForeColor="White" /> </asp:GridView> </div> <div class="duedateheading"> <asp:Label ID="lbl_formonth" runat="server" Font- Bold="True" Text="For Month"></asp:Label> </div> <asp:CheckBoxList ID="chbxlstduedate" runat="server" AutoPostBack="true" onselectedindexchanged="chbxlstduedate_SelectedIndexChanged"> </asp:CheckBoxList> </div>
это срочно для меня, пожалуйста, любой может дать какую-то идею или предложение ..
спасибо