Nishant.Chauhan80 Ответов: 1

Пожалуйста, помогите этой ошибке "входная строка была не в правильном формате.не удалось сохранить < & gt; В столбце скидка. Ожидается тип int32."


<pre><div class="col-md-6">
										<div class="form-group">
											<label for="userEmail">Total Fees</label>
								      
                                            <asp:Label ID="lbltfees" runat="server" CssClass="form-control" ></asp:Label>
										</div>
									</div>
								</div>

                   <div class="row">
									<div class="col-md-6">
										
                                        <div class="form-group">
											<label for="userEmail">Discount Amount</label>
								      
                                           <asp:TextBox ID="txtdisamt" runat="server"  class="form-control" AutoPostBack="true" OnTextChanged="txtdisamt_TextChanged"  ></asp:TextBox>
										</div>

									</div>
									<div class="col-md-6">

                                        <div class="form-group">
										<label for="userEmail"> Paid Fees</label>
							 <asp:TextBox ID="txtpaidfees"  runat="server"  class="form-control" AutoPostBack="true" OnTextChanged="txtpaidfees_TextChanged"  ></asp:TextBox>
										</div>



мой код:-
string companyName = "BrainStorming IT & Commerce";
                       int orderNo = GenerateRandomNo();
                       DataTable dt = new DataTable();
                       dt.Columns.AddRange(new DataColumn[7] {
                           new DataColumn("StudentId", typeof(string)),
                             new DataColumn("Name", typeof(string)),
                           new DataColumn("Course", typeof(string)),
                           new DataColumn("Fees", typeof(int)),
                            new DataColumn("Discount", typeof(int)),
                           new DataColumn("Balance", typeof(int)),
                           new DataColumn("Total", typeof(int))});


                       dt.Rows.Add(lblstuid.Text, lblname.Text, lblcrs.Text, lbltfees.Text, txtdisamt.Text.Trim(), lblblancAmt.Text, txtpaidfees.Text.Trim());//Error this line
                       using (StringWriter sw = new StringWriter())
                       {
                           using (HtmlTextWriter hw = new HtmlTextWriter(sw))
                           {
                               StringBuilder sb = new StringBuilder();


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

преобразование значения текстового поля в целое число

1 Ответов

Рейтинг:
8

Afzaal Ahmad Zeeshan

Эта ошибка обычно возникает, когда вы пытаетесь разобрать строку на целое число или float, которое на самом деле не является целым числом или float. Например, "12" не является целым числом. У вас есть пара столбцов целочисленных данных, которые должны иметь очищенные данные, прежде чем они смогут отображать выходные данные.

new DataColumn("Fees", typeof(int)),
new DataColumn("Discount", typeof(int)),
new DataColumn("Balance", typeof(int)),
new DataColumn("Total", typeof(int))
Поскольку вы уже упомянули эту линию:
dt.Rows.Add(lblstuid.Text, lblname.Text, lblcrs.Text, lbltfees.Text, txtdisamt.Text.Trim(), lblblancAmt.Text, txtpaidfees.Text.Trim());
Есть несколько способов, которыми мы можем решить эту проблему. Во-первых, ne включает вас, когда точка останова попадает, просто проверьте значение этих меток и посмотрите, содержит ли какое-либо из этих значений нецелочисленное значение.

Другим способом справиться с этим было бы использование try...catch блок. Подобный этому:
try {
    dt.Rows.Add(lblstuid.Text, lblname.Text, lblcrs.Text, lbltfees.Text, txtdisamt.Text.Trim(), lblblancAmt.Text, txtpaidfees.Text.Trim());
} catch (Exception e) {
    MessageBox.Show("Data was incorrect, please check again.");
}
Проблема с этим заключается в том, что он не позволяет вам правильно отладить проблему. Вы не знаете, какое из этих полей требует некоторой дезинфекции. С этим можно справиться с помощью int.TryParse() и это то , что вы должны сделать в этом. Видеть это,
int fees = 0;
int discount = 0;
int balance = 0;
int total = 0;

if(!int.TryParse(lbltfees.Text, out fees)) {
    MessageBox.Show("Fees value is not a valid integer.");
}

// Why trimming a text field? Set it to a trimmed value!
if(!int.TryParse(txtdisamt.Text.Trim(), out discount)) {
    MessageBox.Show("Discount value is not a valid integer.");
}

if(!int.TryParse(lblblancAmt.Text, out balance)) {
    MessageBox.Show("Balance value is not a valid integer.");
}

if(!int.TryParse(txtpaidfees.Text.Trim(), out total)) {
    MessageBox.Show("Total value is not a valid integer.");
}

// If we reach here, it means the values are parsed correctly.
dt.Rows.Add(lblstuid.Text, lblname.Text, lblcrs.Text, fees, discount, balance, total);
Теперь код будет безопасно распространяться и устанавливать значения. Пожалуйста, проверьте наличие ошибок компиляции если метод Add требует, чтобы все входные данные были в строковом формате. Я написал этот код с самого начала.


Richard Deeming

NB: MessageBox.Show не будет работать в веб-приложении. :)