kiran kamble Ответов: 2

Расчет в onrowdatabound event gridview


protected void Gridview1_RowDataBound(отправитель объекта, GridViewRowEventArgs e)
{
если (электронная.Подряд.RowType == DataControlRowType.Строкаданных)
{
TextBox txtRate = (TextBox)e. Row.FindControl("txtRate");
TextBox txtQuantity = (TextBox)e. Row.FindControl("txtQuantity");
TextBox txtTotal = (TextBox)e. Row.FindControl("txtTotal");

Р инт = инт.Синтаксический анализ(txtRate.Текст);
Д инт = инт.Синтаксический анализ(txtQuantity.Текст);
Т инт = инт.Синтаксический анализ(txtTotal.Текст);

T = Преобразовать.ToInt32(R * Q);
txtTotal.Текст = Т. Метод ToString();
}
}

Что я уже пробовал:

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

2 Ответов

Рейтинг:
12

manu_dhobale

Пожалуйста, проверьте это
&ЛТ;%@ страницы язык="в C#" AutoEventWireup значение="истинной" отделенного кода="gridcalc.aspx-файл.КС" наследует="WebApplication1.gridcalc" %&ГТ;

<!DOCTYPE html>

< html xmlns="http://www.w3.org/1999/xhtml" >
&ЛТ;глава атрибут runat="сервер"и GT;
в <название&ГТ;&ЛТ;/название&ГТ;
< / head>
& lt;тело>
&ЛТ;форме ID="форма form1" атрибут runat="сервер"и GT;


&ЛТ;АСП:таблицы с ID="gridview1, на" атрибут runat="сервер" EmptyDataText="данные не доступны" AutoGenerateColumns="false" - в OnRowDataBound="Gridview1_RowDataBound"&ГТ;
& lt;колонки>
<asp:TemplateField HeaderText= "ID">
& lt;itemtemplate>
&ЛТ;АСП:текстовое поле с ID="txtID" атрибут runat="сервер" текст=в'<%#Ивала("идентификатор") %&ГТ;' /&ГТ;


<asp:TemplateField HeaderText= "количество" >
& lt;itemtemplate>
&ЛТ;АСП:текстовое поле с ID="txtQuantity" атрибут runat="сервер" autopostback элемента управления="истинный" текст=в'<%#Ивала("количество") %&ГТ;' метода ontextchanged="txtQuantity_TextChanged" /&ГТ;


<asp:TemplateField HeaderText= "Rate">
& lt;itemtemplate>
&ЛТ;АСП:текстовое поле с ID="txtRate" атрибут runat="сервер" autopostback элемента управления="истинный" текст=в'<%#Ивала("курс") %&ГТ;' метода ontextchanged="txtRate_TextChanged" /&ГТ;


<asp:TemplateField HeaderText= "Total">
& lt;itemtemplate>
&ЛТ;АСП:текстовое поле с ID="txtTotal" атрибут runat="сервер" текст=в'<%#Ивала("Итого") %&ГТ;' /&ГТ;





< / форма>
< / body>
< / html>

Файл кода:
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace WebApplication1
{
    public partial class gridcalc : System.Web.UI.Page
    {

        protected void Page_Load(object sender, EventArgs e)
        {

            if (!Page.IsPostBack)
            {
                DataTable dtPart = new DataTable();
                dtPart.Columns.Add("ID", typeof(int));
                dtPart.Columns.Add("Quantity", typeof(int));
                dtPart.Columns.Add("Rate", typeof(int));
                dtPart.Columns.Add("Total", typeof(int));


                dtPart.Rows.Add(25, 1, 2, 3);
                dtPart.Rows.Add(50, 4, 5, 6);

                Gridview1.DataSource = dtPart;
                Gridview1.DataBind();

            }
        }

        protected void Gridview1_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                TextBox txtRate = (TextBox)e.Row.Cells[1].FindControl("txtRate");
                TextBox txtQuantity = (TextBox)e.Row.Cells[2].FindControl("txtQuantity");
                TextBox txtTotal = (TextBox)e.Row.Cells[3].FindControl("txtTotal");
                int T = 0;
                var R = int.Parse(txtRate.Text);
                var Q = int.Parse(txtQuantity.Text);

                T += Convert.ToInt32(R * Q);
                txtTotal.Text = T.ToString();
            }
        }

        protected void txtQuantity_TextChanged(object sender, EventArgs e)
        {
            TextBox qtxt = (TextBox)sender;
            GridViewRow gvRow = (GridViewRow)qtxt.Parent.Parent;
            TextBox Rate = (TextBox)gvRow.FindControl("txtRate");
            TextBox Total = (TextBox)gvRow.FindControl("txtTotal");
            try
            {
                Total.Text = ((Convert.ToInt32(qtxt.Text)) * (Convert.ToInt32(Rate.Text))).ToString();
            }
            catch { Total.Text = "0"; qtxt.Text = "0"; }
        }

        protected void txtRate_TextChanged(object sender, EventArgs e)
        {
            TextBox Rate = (TextBox)sender;
            GridViewRow gvRow = (GridViewRow)Rate.Parent.Parent;
            TextBox qtxt = (TextBox)gvRow.FindControl("txtQuantity");
            TextBox Total = (TextBox)gvRow.FindControl("txtTotal");
            try
            {
                Total.Text = ((Convert.ToInt32(qtxt.Text)) * (Convert.ToInt32(Rate.Text))).ToString();
            }
            catch { Total.Text = "0"; qtxt.Text = "0"; }
        }
    }
}


Рейтинг:
1

manu_dhobale

Я думаю, что ваш код не может найти элементы управления Textbox внутри gridview
Изменение ниже строк

TextBox txtRate = (TextBox)e.Row.FindControl("txtRate");
TextBox txtQuantity = (TextBox)e.Row.FindControl("txtQuantity");
TextBox txtTotal = (TextBox)e.Row.FindControl("txtTotal");

используйте что-то вроде этого, измените индекс столбца в соответствии с вашим положением столбца
TextBox txtRate = (TextBox)e.Row.Cells[1].FindControl("txtRate");
TextBox txtQuantity = (TextBox)e.Row.Cells[2].FindControl("txtQuantity");
TextBox txtTotal = (TextBox)e.Row.Cells[3].FindControl("txtTotal");


kiran kamble

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

manu_dhobale

поделиться кодом в том числе GridView в структуре

kiran kamble

&ЛТ;АСП:таблицы с ID="gridview1, на" атрибут runat="сервер" EmptyDataText="данные не доступны" OnRowDataBound="Gridview1_RowDataBound" AutoGenerateColumns="false" - в&ГТ;
& lt;колонки>
<asp:TemplateField HeaderText= "ID">
& lt;itemtemplate>
&ЛТ;АСП:текстовое поле с ID="txtID" атрибут runat="сервер" текст=в'<%#Ивала("идентификатор") %&ГТ;' /&ГТ;


<asp:TemplateField HeaderText= "количество" >
& lt;itemtemplate>
&ЛТ;АСП:текстовое поле с ID="txtQuantity" атрибут runat="сервер" текст=в'<%#Ивала("количество") %&ГТ;'/&ГТ;


<asp:TemplateField HeaderText= "Rate">
& lt;itemtemplate>
&ЛТ;АСП:текстовое поле с ID="txtRate" атрибут runat="сервер" текст=в'<%#Ивала("курс") %&ГТ;'/&ГТ;


<asp:TemplateField HeaderText= "Total">
& lt;itemtemplate>
&ЛТ;АСП:текстовое поле с ID="txtTotal" атрибут runat="сервер" текст=в'<%#Ивала("Итого") %&ГТ;'/&ГТ;
&ЛТ;%--&ЛТ;АСП:метка идентификатор="Итого" атрибут runat="сервер" текст = в '<%#(int32)в функции eval("количество") - (int32)в функции eval("норма")%&ГТ;' /&ГТ;--%&ГТ;







int R, Q, T = 0;
protected void Gridview1_RowDataBound(отправитель объекта, GridViewRowEventArgs e)
{
если (электронная.Подряд.RowType == DataControlRowType.Строкаданных)
{
Текстовое поле txtRate = (текстовое поле)Эл.Подряд.Клетки[1].FindControl("txtRate");
Текстовое поле txtQuantity = (текстовое поле)Эл.Подряд.Клеток[2].FindControl("txtQuantity");
Текстовое поле txtTotal = (текстовое поле)Эл.Подряд.Клеток[3].FindControl("txtTotal");

Р = инт.Синтаксический анализ(txtRate.Текст);
М = инт.Синтаксический анализ(txtQuantity.Текст);

T += Преобразование.ToInt32(R * Q);
txtTotal.Текст = Т. Метод ToString();
}
}