DataTable values are getting the default values(Initially loaded values) when we click on the dropdown icon of DataTable in asp.net C# using jQuery

Ashok Kumar 201 Reputation points
2024-07-22T07:45:31.2566667+00:00

I'm very new to this DataTable logic implementation concept and I have append the data to the DataTable and append successfully and in that DataTable controls I have written some event logic (ex:- dropdown onchange and textbox oninput events) and those events are firing successfully and values are changing on other controls as well

HTML Logic:-

<asp:Button ID="sb_add" runat="server" OnClientClick="SB_Add_Legs(event); return false;" Text="+ ADD"CssClass="btn btn-primary w-100 w-md-auto text-center px-4 spinbutton" />
<table class="table table-borderless rowSpace table-round-row dtr-inline  SB_table dataTable  "
                            id="strastrategy_builder_datatable" style="width: 100%;">
                            <thead>
                                <tr>
                                    <th>Action</th>
                                    <th>Instrument</th>
                                    <th>Expiry</th>
                                    <th>Strike</th>
                                    <th>Qty</th>
                                    <th>Future Price</th>
                                    <th>Price</th>
                                    <th>Delta</th>
                                    <th>Gamma</th>
                                    <th>Theta</th>
                                    <th>Vega</th>
                                    <th>IV</th>
                                    <th data-dt-order="disable"></th>
                                </tr>
                            </thead>
                            <tbody>
                </tbody></table>

jQuery Add button entire logic:-

function SB_Add_Legs(e) {
    e.preventDefault();
    var d_stg = '';
    var s_leg_data = "";
    var b_selected = '';
    var s_selected = '';
    var ddl_expdate = "";
    var ddl_strike = "";
    var ddl_inst = "";
    var lnt = $("#strastrategy_builder_datatable .aliceBlueRow").length;
    if (lnt > 0 && $("#hdn_sb_refresh_sh").val() === '1')
        $("#blurid").addClass("blur5"), $("#sb_refresh").show();
    if (lnt < 10) {
        var s = 'nifty;
        var s_bs = 'buy';
        var s_inst = 'ce';
        var s_stk = '12345';
        var s_ex = '30-07-1995';
        var s_q = '25;   
			var drpInstrumentValue = 'ce';
                var d_exp = '02-07-1990';
                var d_stk = s_stk;
                var ddl_bs = `<option value="Buy" ${s_bs.toLowerCase() === 'buy' ? "selected" : ""}>BUY</option>
                          <option value="Sell" ${s_bs.toLowerCase() === 'sell' ? "selected" : ""}>SELL</option>`;
						  
                    ddl_inst = `<option value="CE" ${drpInstrumentValue === "CE" ? "selected" : ""}>CE</option>
                               <option value="PE" ${drpInstrumentValue === "PE" ? "selected" : ""}>PE</option>
                               <option value="FUT" ${drpInstrumentValue === "FUT" ? "selected" : ""}>FUT</option>`;
                
               ddl_expdate = `<option value="2024-07-25">2024-07-25</options>
							   <option value="2024-07-26">2024-07-26</options>
							   <option value="2024-07-27">2024-07-27</options>`;
            ddl_strike = `<option value="24550">24550</options>
							<option value="24560">24560</options>
							<option value="24570">24570</options>`;
								
				var FuturePrice = '24534';
				var Price = '224.50';
				var Delta = '0.4938';
				var Gamma = '0.0007';
				var Theta = '-19.3594';
				var Vega = '12.5474';
				var IV = '18.51';
                SB_Generate_Legs_Added_HTML(ddl_bs, ddl_inst, ddl_expdate,
                    ddl_strike, s_q, FuturePrice, Price, Delta, Gamma,
                    Theta, Vega, IV);
    }
    else {
        $("#perrormsg").html('');
        $("#perrormsg").html('You can add only a maximum of 10 rows');
        $("#modelpopupmsg").modal("show");
    }
    return false;
}
function SB_Generate_Legs_Added_HTML(ddl_bs, inst, ddl_expdate, ddl_strike, Qty, FuturePrice, Price, Delta, Gamma, Theta, Vega, IV) {
    var d_qty = $("#hdn_sb_lotsize").val();
    var s_inst = $("#sb_instrument").val();
    $("#strastrategy_builder_datatable").DataTable().destroy();
    var table = $('#strastrategy_builder_datatable').DataTable({});
    var action = ` <div class="d-inline-block ">
                      <select class="form-select border-0 analyserfields whiteBG" style="min-width: 80px;" name="sbaction" onchange="SB_Legs_Added_table_val_change('ddl',this);">
                          ${ddl_bs}
                      </select>
                  </div>`;
    var ddl_i = `  <select class="form-select border-0 analyserfields whiteBG" style="min-width: 80px;" name="sbinst" onchange="SB_Legs_Added_table_val_change('ddl',this);">
                      ${inst}
                  </select>`;
    var ddl_e = `  <select class="form-select border-0 analyserfields whiteBG ${s_inst === 'EQ' ? 'textDisable' : ''}" style="min-width: 130px;" ${s_inst === 'EQ' ? 'disabled' : ''} name="sbexp" onchange="SB_Legs_Added_table_val_change('ddl',this);">
                      ${ddl_expdate}
                  </select>`;
    var ddl_s = `  <select class="form-select border-0 analyserfields whiteBG ${s_inst === 'FUT' || s_inst === 'EQ' ? 'textDisable' : ''}" style="min-width: 100px;" ${s_inst === 'FUT' || s_inst === 'EQ' ? 'disabled' : ''} name="sbstrike" onchange="SB_Legs_Added_table_val_change('ddl',this);">
                      ${ddl_strike}
                  </select>`;
    var q = ` <div class="input-group flex-nowrap v-line pe-2">
                      <span class="input-group-text border-0 px-1"><i class="bi bi-dash textDanger pointer" onclick="SB_Legs_Added_table_minqty(${d_qty},this);"></i></span>
                      <input type="text" class="form-control text-center border-0 analyserfields whiteBG" name="sbqty" value=${Qty} autocomplete="off"
                          style="min-width: 70px;" maxlength='6' onblur="SB_Add_Leg_QtyValue(this);" oninput="SB_calculateqtylivenetprem('qty',this);"/>
                      <span class="input-group-text border-0 px-1"><i class="bi bi-plus textSuccess pointer" onclick="SB_Legs_Added_table_maxqty(${d_qty},this);"></i></span>
                  </div>`;
    var f = ` <input type="text" class="form-control border-0 analyserfields whiteBG" name="sbfprice" maxlength="9" style="min-width: 90px;" value=${FuturePrice}
             autocomplete="off" oninput="SB_Legs_Added_table_val_change('futprice',this);"/>`;
    var p = `<input type="text" class="form-control border-0 analyserfields whiteBG" name="sbprice" style="min-width: 90px;" maxlength="9" value=${Price}
                  autocomplete="off" oninput="SB_Legs_Added_table_val_change('price',this);"/>`;
    var d = ` <input type="text" class="form-control border-0 dull-pastel-greenBG analyserfields whiteBG" style="min-width: 90px;" maxlength="7" name="sbdelta"
                    value=${Delta}  oninput="this.value = this.value.replace(/[^0-9]/g, '')" disabled/>`;
    var g = ` <input type="text" class="form-control border-0 dull-pastel-greenBG analyserfields whiteBG" style="min-width: 90px;" maxlength="7" name="sbgamma"
                      value=${Gamma}  oninput="this.value = this.value.replace(/[^0-9]/g, '')" disabled/>`;
    var t = ` <input type="text" class="form-control border-0 dull-pastel-greenBG analyserfields whiteBG" style="min-width: 100px;" maxlength="7" name="sbtheta"
                       value=${Theta}  oninput="this.value = this.value.replace(/[^0-9]/g, '')" disabled/>`;
    var v = ` <input type="text" class="form-control border-0 dull-pastel-greenBG analyserfields whiteBG" style="min-width: 100px;" maxlength="7" name="sbvega"
                     value=${Vega}  oninput="this.value = this.value.replace(/[^0-9]/g, '')" disabled/>`;
    var iv = ` <input type="text" class="form-control border-0 analyserfields whiteBG" name="sbiv" style="min-width: 100px;" maxlength="6" autocomplete="off"
                      value=${IV}  oninput="SB_Legs_Added_table_val_change('iv',this);" />`;
    var dlt = `<a href="javascript://" class="px-2 py-1 fs-6 analyserfields " name="sbdelete" onclick="SB_DeleteLegs(event,this)">
                      <i class="bx bxs-trash-alt text-danger"></i>
                  </a>`;
    table.row
        .add([
            action,
            ddl_i,
            ddl_e,
            ddl_s,
            q,
            f,
            p,
            d,
            g,
            t,
            v,
            iv,
            dlt,
        ])
        .draw(false);
    $("#strastrategy_builder_datatable").DataTable().destroy();
    $("#strastrategy_builder_datatable").DataTable({
        ordering: false,
        info: false,
        paging: false,
        searching: false,
        responsive: true,
        language: {
            emptyTable: " ",
        },
        columnDefs: [
             {
                responsivePriority: 1, //column view
                targets: 0 //column name
            },
            {
                responsivePriority: 2,
                targets: 1
            },
            {
                responsivePriority: 4,
                targets: 2
            },
            {
                responsivePriority: 5,
                targets: 3
            },
            {
                responsivePriority: 7,
                targets: 4
            },
            {
                responsivePriority: 6,
                targets: 11
            },
            {
                className: 'dt-center',  // delete icon response column position 3
                width: '50px',
                responsivePriority: 3,
                targets: -1
            },
        ],
        createdRow: function (row, data, dataIndex) {
            $(row).addClass('aliceBlueRow');
        }
    });
}

Here is my Img examples are :-

Initially if I click on the Add button row is appending to the DataTable

img-1

And I clicked on the DataTable dropdown icon

img-2

The Theta and Vega values are showing like -19.3594 and 12.5474

And I enter some value on the IV column 845 and dependent columns values will change ex:- Theta and Vega columns values are changed

img-3

And if I click on the same dropdown of DataTable icon the previous values are coming instead on new values on the Theta and Vega

img-4

In this img the IV values845 didn't change but the Theta and Vega values are changed

EDITED

function SB_Legs_Added_table_val_change(type, tt) {

    console.log("type :- " + type);

    var s, e, st, i, bs, t, fp, p = "";
    var sb_l = '';


    t = $(tt).closest(".aliceBlueRow");
    s = $("#sb_smbl_srch").val();

    
    if (type === 'iv' || type === 'futprice' || type === 'price') {


        var value = tt.value;
        console.log("value :- " + value);
        //alert(value);
        value = value.replace(/[^0-9.]/g, '');
        //alert(value);
        var parts = value.split('.');
        //alert(parts);

        if (parts.length > 1) {
            value = parts[0] + '.' + parts[1].slice(0, 2);
        }

        tt.value = value;
        //alert($.isNumeric(value));

        if (!$.isNumeric(value))
            return false;

        //return;
        console.log("nmbr ?");
        console.log("value :-" + value);


        //parent row logic
        let parentRow = $(tt).closest('tr.dt-hasChild');
        let childRow = parentRow.nextAll('tr.child').first();

        console.log(childRow.length + " parent : value enter  row " + parentRow.length);

        //child row logic
        let childRow_1 = $(tt).closest('tr.child');
        let parentRow_1 = childRow_1.prevAll('tr.dt-hasChild').first();

        console.log(childRow_1.length + "child : value enter row " + parentRow_1.length);


        //let sbinstValue = '';
        //let sbfpriceValue = '';
        //let sbvegaValue = '';
        if (parentRow.length && childRow.length && (type === 'iv' || type === 'futprice' || type === 'price')) {


            console.log("Parent row found.");


            if (childRow.find('.analyserfields[name="sbexp"]').length > 0)
                e = childRow.find('.analyserfields[name="sbexp"]').val();
            else
                e = parentRow.find('.analyserfields[name="sbexp"]').val();

            if (childRow.find('.analyserfields[name="sbstrike"]').length > 0)
                st = childRow.find('.analyserfields[name="sbstrike"]').val();
            else
                st = parentRow.find('.analyserfields[name="sbstrike"]').val();

            if (childRow.find('.analyserfields[name="sbinst"]').length > 0)
                i = childRow.find('.analyserfields[name="sbinst"]').val();
            else
                i = parentRow.find('.analyserfields[name="sbinst"]').val();

            if (childRow.find('.analyserfields[name="sbaction"]').length > 0)
                bs = childRow.find('.analyserfields[name="sbaction"]').val();
            else
                bs = parentRow.find('.analyserfields[name="sbaction"]').val();


            if (type === 'iv') {

                if (childRow.find('.analyserfields[name="sbfprice"]').length > 0)
                    fp = childRow.find('.analyserfields[name="sbfprice"]').val();
                else
                    fp = parentRow.find('.analyserfields[name="sbfprice"]').val();
                //fp = $(t).find(".analyserfields[name=sbfprice]").val();

                console.log("iv data :-" + s + " : " + e + " : " + st + " : " + i + " : " + bs + " : " + value + " : " + fp);
                sb_l = LTPFromIV_AJAXCall(s, e, st, i, bs, value, fp);

            }
            else if (type === 'futprice') {

                if (childRow.find('.analyserfields[name="sbprice"]').length > 0)
                    p = childRow.find('.analyserfields[name="sbprice"]').val();
                else
                    p = parentRow.find('.analyserfields[name="sbprice"]').val();
                //p = $(t).find(".analyserfields[name=sbprice]").val(); //fp = $(t).find(".analyserfields[name=sbfprice]").val();

                console.log("fprice data :-" + s + " : " + e + " : " + st + " : " + i + " : " + bs + " : " + p + " : " + value);
                sb_l = LTPFromPrice_FuturePrice_AJAXCall(s, e, st, i, bs, p, value);

            }
            else if (type === 'price') {

                if (childRow.find('.analyserfields[name="sbfprice"]').length > 0)
                    fp = childRow.find('.analyserfields[name="sbfprice"]').val();
                else
                    fp = parentRow.find('.analyserfields[name="sbfprice"]').val();
                //fp = $(t).find(".analyserfields[name=sbfprice]").val();

                console.log("price data :-" + s + " : " + e + " : " + st + " : " + i + " : " + bs + " : " + value + " : " + fp);
                sb_l = LTPFromPrice_FuturePrice_AJAXCall(s, e, st, i, bs, value, fp);

            }

            console.log("type type paresnt :-" + type);
            console.log("sb_l :- " + sb_l);
            console.log(sb_l);

            if (sb_l && sb_l.length > 0) {

                if (type != 'futprice') {
                    //t.find(".analyserfields[name=sbfprice]").val(sb_l[0].FuturePrice);
                    if (childRow.find('.analyserfields[name="sbfprice"]').length > 0)
                        childRow.find('.analyserfields[name="sbfprice"]').val(sb_l[0].FuturePrice);
                    else
                        parentRow.find('.analyserfields[name="sbfprice"]').val(sb_l[0].FuturePrice);
                }

                if (type != 'price') {

                    //t.find(".analyserfields[name=sbprice]").val(sb_l[0].Price);
                    if (childRow.find('.analyserfields[name="sbprice"]').length > 0)
                        childRow.find('.analyserfields[name="sbprice"]').val(sb_l[0].Price);
                    else
                        parentRow.find('.analyserfields[name="sbprice"]').val(sb_l[0].Price);
                }

                //t.find(".analyserfields[name=sbdelta]").val(sb_l[0].Delta);
                if (childRow.find('.analyserfields[name="sbdelta"]').length > 0)
                    childRow.find('.analyserfields[name="sbdelta"]').val(sb_l[0].Delta);
                else
                    parentRow.find('.analyserfields[name="sbdelta"]').val(sb_l[0].Delta);

                //t.find(".analyserfields[name=sbgamma]").val(sb_l[0].Gamma);
                if (childRow.find('.analyserfields[name="sbgamma"]').length > 0)
                    childRow.find('.analyserfields[name="sbgamma"]').val(sb_l[0].Gamma);
                else
                    parentRow.find('.analyserfields[name="sbgamma"]').val(sb_l[0].Gamma);

                //t.find(".analyserfields[name=sbtheta]").val(sb_l[0].Theta);
                if (childRow.find('.analyserfields[name="sbtheta"]').length > 0)
                    childRow.find('.analyserfields[name="sbtheta"]').val(sb_l[0].Theta);
                else
                    parentRow.find('.analyserfields[name="sbtheta"]').val(sb_l[0].Theta);

                //t.find(".analyserfields[name=sbvega]").val(sb_l[0].Vega);
                if (childRow.find('.analyserfields[name="sbvega"]').length > 0)
                    childRow.find('.analyserfields[name="sbvega"]').val(sb_l[0].Vega);
                else
                    parentRow.find('.analyserfields[name="sbvega"]').val(sb_l[0].Vega);

                if (type != 'iv') {
                    //t.find(".analyserfields[name=sbiv]").val(sb_l[0].IV);
                    if (childRow.find('.analyserfields[name="sbiv"]').length > 0)
                        childRow.find('.analyserfields[name="sbiv"]').val(sb_l[0].IV);
                    else
                        parentRow.find('.analyserfields[name="sbiv"]').val(sb_l[0].IV);
                }

                SB_CalculateNetPremium();

                if ($("#hdn_sb_refresh_sh").val() === '1')
                    $("#blurid").addClass("blur5"), $("#sb_refresh").show();

            }
        }
    }
}

Suggest me how to achieve this and why those values are changing and values should not change until any event should fire.

I'm not sure I explained correctly hope you understood my problem.

Can you please suggest me DataTable is recommended or not in this scenario (logic implementation).

Sorry for my bad English.

ASP.NET
ASP.NET
A set of technologies in the .NET Framework for building web applications and XML web services.
3,448 questions
JavaScript API
JavaScript API
An Office service that supports add-ins to interact with objects in Office client applications.
968 questions
{count} votes

1 answer

Sort by: Most helpful
  1. Bruce (SqlWork.com) 63,501 Reputation points
    2024-07-22T18:14:32.9233333+00:00

    your approach seems wrong. you should be using javascript sourced data:

    https://datatables.net/examples/data_sources/js_array.html

    and column render functions:

    https://datatables.net/reference/option/columns.render

    0 comments No comments

Your answer

Answers can be marked as Accepted Answers by the question author, which helps users to know the answer solved the author's problem.