сделать расчет внутри сетки - PullRequest
0 голосов
/ 01 марта 2012

У меня есть эти два элемента шаблонов текстовых полей внутри сетки, и я пытаюсь сделать расчет между ними, но внутри сетки не работает. Вот мой код

  <asp:TemplateField HeaderText="Net Weight">
                    <ItemTemplate>
                        <asp:TextBox ID="txtNetWT" runat="server" Width="70px"  AutoPostBack=false></asp:TextBox>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Rate">
                    <ItemTemplate>
                        <asp:TextBox ID="txtRate" runat="server" Width="70px" ></asp:TextBox>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="SNF">
                    <ItemTemplate>
                        <asp:TextBox ID="txtSNF" runat="server" Width="70px" ></asp:TextBox>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="FAT">
                    <ItemTemplate>
                        <asp:TextBox ID="txtFat" runat="server" Width="70px" ></asp:TextBox>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="LR">
                    <ItemTemplate>
                        <asp:TextBox ID="txtLR" runat="server" Width="70px"></asp:TextBox>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="14 TS">
                    <ItemTemplate>
                        <asp:TextBox ID="txtTS" runat="server" Width="70px" ></asp:TextBox>
                    </ItemTemplate>
                </asp:TemplateField>

Но когда я ввожу значение, это не влияет на другие элементы. Пожалуйста, сообщите мне любую подходящую функцию в Javascript, чтобы сделать это.

Ответы [ 3 ]

3 голосов
/ 10 декабря 2012

Изменять только страницу aspx.cs "onkeyup" txtFATObj.Attributes.Add ("onkeyup", "Calculate ('" + txtFATObj.ClientID + "', '" + txtSNFObj.ClientID + "', '" + txtNETWTObj.ClientID + "','" + txtTSObj.ClientID + "')");

2 голосов
/ 01 марта 2012

Пожалуйста, проверьте следующие коды. Обратите внимание, что вам нужно скорректировать .. целое число или число с плавающей точкой .. и т. Д. Я проверил некоторые расчеты на основе вашей формулы.

- поместить в раздел javascript внутри головы

<script type="text/javascript" language="javascript">
        function Calculate(txtFAT, txtSNF, txtNETWT, txtTS) {
            var txtFATObj = document.getElementById(txtFAT);
            var txtSNFObj = document.getElementById(txtSNF);
            var txtNETWTObj = document.getElementById(txtNETWT);
            var txtTSObj = document.getElementById(txtTS);

            if (txtFATObj != null && txtSNFObj != null && txtNETWTObj != null && txtTSObj != null) {
                txtTSObj.value = parseFloat(txtFATObj.value) + (parseFloat(txtSNFObj.value) * parseFloat(txtNETWTObj.value) / 14);
            }
        }
    </script>

--- проверенный код вида сетки aspx -----------

<asp:GridView ID="grvCalc" runat="server" AutoGenerateColumns="false" 
        onrowdatabound="grvCalc_RowDataBound">
        <Columns>
            <asp:BoundField HeaderText="Item" DataField="Item" />
            <asp:TemplateField HeaderText="Net Weight">
                <ItemTemplate>
                    <asp:TextBox ID="txtNetWT" runat="server" Width="70px"></asp:TextBox>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Rate">
                <ItemTemplate>
                    <asp:TextBox ID="txtRate" runat="server" Width="70px"></asp:TextBox>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="SNF">
                <ItemTemplate>
                    <asp:TextBox ID="txtSNF" runat="server" Width="70px"></asp:TextBox>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="FAT">
                <ItemTemplate>
                    <asp:TextBox ID="txtFat" runat="server" Width="70px"></asp:TextBox>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="LR">
                <ItemTemplate>
                    <asp:TextBox ID="txtLR" runat="server" Width="70px"></asp:TextBox>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="14 TS">
                <ItemTemplate>
                    <asp:TextBox ID="txtTS" runat="server" Width="70px"></asp:TextBox>
                </ItemTemplate>
            </asp:TemplateField>            
        </Columns>
    </asp:GridView>

--------- тестовые данные привязываются к gridview ----------------

private void BindGridView()
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("Item");

            DataRow dr = dt.NewRow();
            dr[0] = "Item 1";
            dt.Rows.Add(dr);

            dr = dt.NewRow();
            dr[0] = "Item 2";
            dt.Rows.Add(dr);

            dr = dt.NewRow();
            dr[0] = "Item 3";
            dt.Rows.Add(dr);

            grvCalc.DataSource = dt;
            grvCalc.DataBind();
        }

----- необходимо прикрепить клиентское событие каждого текстового элемента управления для участия в вычислениях - событие привязки данных строки сетки .. вычисление выполнит однофокусное событие текстового поля

protected void grvCalc_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                TextBox txtFATObj = (TextBox)e.Row.FindControl("txtFAT");
                TextBox txtSNFObj = (TextBox)e.Row.FindControl("txtSNF");
                TextBox txtNETWTObj = (TextBox)e.Row.FindControl("txtNETWT");
                TextBox txtTSObj = (TextBox)e.Row.FindControl("txtTS");

                txtFATObj.Attributes.Add("onfocusout", "Calculate('" + txtFATObj.ClientID + "','" + txtSNFObj.ClientID + "','" + txtNETWTObj.ClientID + "','" + txtTSObj .ClientID + "')");
                txtSNFObj.Attributes.Add("onfocusout", "Calculate('" + txtFATObj.ClientID + "','" + txtSNFObj.ClientID + "','" + txtNETWTObj.ClientID + "','" + txtTSObj.ClientID + "')");
                txtNETWTObj.Attributes.Add("onfocusout", "Calculate('" + txtFATObj.ClientID + "','" + txtSNFObj.ClientID + "','" + txtNETWTObj.ClientID + "','" + txtTSObj.ClientID + "')");
            }
        }
0 голосов
/ 01 марта 2012

Это должно работать:

onkeydown="document.getElementById('<%= txtRate.ClientID %>').value=this.value;"
...