Fiínek Cahů Ответов: 2

Разделение и подстрока из datagrid


Привет,

Я бы хотел удалить значение в столбце datagrid 12, начиная с .xxxxx, и получить нормальное значение для диаграммы.
например: 12.51348242 - 12
100.000000 до 100
и следующий.

Dim dtPieChartData = New DataTable()
       dtPieChartData.Columns.Add("Datum a čas")
       dtPieChartData.Columns.Add("Plnění normy")
       For Each row As DataGridViewRow In DataGridView1.Rows

           Dim indexCategoryColumn As Integer = 0
           Dim indexTotalColumn As Integer = 12
           dtPieChartData.Rows.Add(row.Cells(indexCategoryColumn).Value, row.Cells(indexTotalColumn).Value.IndexOf(".") - 1)

       Next

       Chart3.DataSource = dtPieChartData
       Chart3.Series("Series1").XValueMember = "Datum a čas"
       Chart3.Series("Series1").YValueMembers = "Plnění normy"
       Chart3.Titles.Add("Category Title")
       Chart3.Series("Series1").ChartType = SeriesChartType.Line
       Chart3.Series("Series1").IsValueShownAsLabel = True


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

Я попробовал это сделать, но получил ошибку: Public member indexof type decimal не найден
dtPieChartData.Rows.Add(row.Cells(indexCategoryColumn).Value, row.Cells(indexTotalColumn).Value.Split(".")(1))

2 Ответов

Рейтинг:
10

Maciej Los

OriginalGriff уже дал вам подсказку. Я надеюсь, что мой будет более удобным:

Если вы хотите отказаться от десятичных значений и получить целое число, вы должны преобразовать его, а не оперировать строковым представлением числа!

Видеть:

Dim myData As Decimal() = New Decimal(){12.51348242, 15.883, 11.6879658, 12.1112225}

For Each md As Decimal In myData
	Console.WriteLine(Decimal.ToInt32(md))
Next

Результат:
12
15
11
12


Так:
dtPieChartData.Rows.Add(row.Cells(indexCategoryColumn).Value, Decimal.ToInt32(row.Cells(indexTotalColumn).Value))
'or
'dtPieChartData.Rows.Add(row.Cells(indexCategoryColumn).Value, Convert.ToInt32(row.Cells(indexTotalColumn).Value))


Подробнее на сайте:
Как преобразовать объект в другой тип в Visual Basic | Microsoft Docs[^]
Неявные и явные преобразования (Visual Basic) | Microsoft Docs[^]
Функции Преобразования Типов (Visual Basic) | Microsoft Docs[^]


Рейтинг:
1

OriginalGriff

Ваш столбец в источнике данных не является строкой: это числовое значение, вероятно, a decimal ценность. Только строки имеют метод IndexOf!

Если вы хотите использовать IndexOf, вам придется преобразовать свойство Value в строку (используя метод ToString) или - лучше - просто привести его к целому числу, которое отбросит дробную часть числа.


[no name]

Я пытался это сделать но опять ошибка:
dtPieChartData.Rows.Add(row.Cells(indexCategoryColumn).Значение, строка.Клетки(indexTotalColumn).Ценность.Метод toString.IndexOf(".") - 1)

OriginalGriff

Перестань гадать, что делать, сядь и подумай. Это не сложно - просто подумайте о том, что именно вы пытаетесь сделать, и что именно делает ваш код!
(Затем посмотрите на сообщение об ошибке, которое, вероятно, очень явное)

[no name]

Мне нужен был совет от тебя, а не от урока идиота.

OriginalGriff

Если вы собираетесь быть грубым, то вы ничего не получите.

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

[no name]

Я читал твой пост..Я знаю, что столбец-это не строка, а десятичная дробь. Если вы читали мой первый пост, то знаете его, где я написал, например: 12.51348242 до 12
От 100.000000 до 100. Я искал решение на goolge, но мой пример я не нашел его. это я тут написал.

OriginalGriff

Тогда почему вы пытаетесь рассматривать десятичное значение как строку?

[no name]

Я хочу удалить все символы после десятичной точки. И все символы перед десятичной точкой перемещаются на диаграмму.

OriginalGriff

Числа не имеют символов, они не хранятся таким образом.

Прочтите еще раз то, что я сказал изначально...

Maciej Los

+5!