foreigh Ответов: 3

Проверьте значение datatable с помощью C#


i want to check if values of datatable of the same column are equals to "int" or not , so if it's true i want to calculate with content value the sum. This is my code which return always when i click on sum button "pas tous entier" .
Thank you in advance!


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

private void button7_Click(object sender, EventArgs e)
        {
            int i = 0, s = 0;
            String type ="int";

            DataTable dt = new DataTable("Table_insertion");

            bool exists = dt.AsEnumerable().Any(row => type == row.Field<String>("Type"));
            if (exists== true)
            {
                for (i = 0; i < dataGridView1.Rows.Count; ++i)
                {
                    s += Convert.ToInt32(dataGridView1.Rows[i].Cells[2].Value);

                }
                label5.Text = s.ToString();           
            } 
            else
            {
                MessageBox.Show("pas tous entiers");
            }
          
        }

ZurdoDev

О чем вы нас просите?

foreigh

чтобы помочь мне узнать, почему сумма не будет вычислена, и всегда показывать мне сообщение "pas tous entiers", даже если все значения типов являются "int".

ZurdoDev

Мы не можем, потому что не можем запустить ваш код. Просто отладьте его и посмотрите, что происходит. Это очень просто.

3 Ответов

Рейтинг:
7

Richard Deeming

Цитата:
DataTable dt = new DataTable("Table_insertion");
bool exists = dt.AsEnumerable().Any(row => type == row.Field<String>("Type"));
Вы создаете новый пустой DataTable, в котором нет никаких строк. Затем вы проверяете, соответствует ли какая-либо из нулевых строк в этой таблице вашему условию.

Неудивительно, что ответ всегда будет "нет". :)


Рейтинг:
0

OriginalGriff

Не используйте функции преобразования, кроме как для значений, которые, как вы знаете, являются допустимыми: поскольку вы не знаете, является ли это целое число, вам нужно использовать int.Вместо этого TryParse - он возвращает bool, чтобы сказать "преобразовано / недопустимо".

int value;
if (int.TryParse(dataGridView1.Rows[i].Cells[2].Value, out value))
   {
   s += value;
   }


foreigh

когда я пытаюсь это сделать, он показывает мне ошибку =>не удается преобразовать объект в строку

Рейтинг:
0

RickZeeland

Вы можете узнать, есть ли такой столбец типа int:

bool exists = false;

foreach (DataColumn col in dt.Columns)
{
    if (col.DataType.Name == "Int32")
    {
        exists = true;
    }
}