Member 13895589 Ответов: 1

Привязка к базе данных, если потом еще кирпичная стена...


У меня есть привязанный к базе данных grideview, где я хочу цветокодировать ячейки в моем бэкэнде aspx.vb, основываясь на критериях... Я начал с того, что:

If IsDBNull(DataBinder.Eval(e.Row.DataItem, "SwitchPort1")) = True Then
            e.Row.Cells(3).ForeColor = Drawing.Color.Black

Else
            e.Row.Cells(3).BackColor = Drawing.Color.Green

End If


***

Это сработало, поэтому я решил добавить к нему несколько операторов ElseIf и заставить его посмотреть на разницу между NullOrEmpty, но не могу правильно понять синтаксис. Есть несколько примеров, но по какой-то причине я не прохожу мимо первого "Если", больше ничего не оценивается. Я тестирую значения базы данных, чтобы принудительно изменить цвет ячейки, и не могу заставить ячейки делать что-либо, кроме белого с черным текстом (если db равен нулю) или зеленым фоном (иначе). Может ли кто-нибудь помочь мне понять, что я делаю не так? "Гость" - это конкретное значение, по которому я хочу произвести поиск, а если присутствует-определенный цвет.

If (e.Row.RowType <> DataControlRowType.DataRow) Then
    Exit Sub
End If
If IsDBNull(DataBinder.Eval(e.Row.DataItem, "SwitchPort1")) = True Then
    e.Row.Cells(3).ForeColor = Drawing.Color.Black
ElseIf Len(DataBinder.Eval(e.Row.DataItem, "SwitchPort1")) = 0 Then
    e.Row.Cells(3).BackColor = Drawing.Color.Black
ElseIf DataBinder.Eval(e.Row.DataItem, "SwitchPort1").ToString = "" Then
    e.Row.Cells(3).BackColor = Drawing.Color.Blue
ElseIf DataBinder.Eval(e.Row.DataItem, "SwitchPort1").ToString = "Guest" Then
    e.Row.Cells(3).BackColor = Drawing.Color.Yellow
Else
    e.Row.Cells(3).BackColor = Drawing.Color.Green
End If


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

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

Patrice T

Что вы имеете в виду, говоря: "но не можете правильно понять синтаксис"?
Опишите проблему, сообщение об ошибке, положение

1 Ответов

Рейтинг:
9

Maciej Los

Если я вас хорошо понимаю... я бы предложил упростить это с помощью Класс словаря[^].

Видеть:

'define "color translator" ;)
Dim ColorTranslator As Dictionary(Of String, Drawing.Color) = New Dictionary(Of String, Drawing.Color)
'add keys and values
With ColorTranslator
	.Add("-1", Drawing.Color.Black)
	.Add("0", Drawing.Color.Black)
	.Add("", Drawing.Color.Blue)
	.Add("Guest", Drawing.Color.Yellow)
End With

'...
'later
'...

Dim sVal As String = DataBinder.Eval(e.Row.DataItem, "SwitchPort1").ToString()
e.Row.Cells(3).BackColor = If(Not ColorTranslator.ContainsKey(sVal), Drawing.Color.Green, ColorTranslator(sVal))


Member 13895589

СПАСИБО!!!! Это сработало идеально!

Maciej Los

Я рад, что смог помочь.

Member 13895589

Если я могу спросить, есть ли способ назвать "часть" или словарное значение? Я использовал ваш ответ, чтобы проработать то, что я вижу, и если ячейка в SQL-это nchar(10), то для того, чтобы заставить "гостя" работать, я должен использовать "гостя" (таким образом, всего 10 символов, включая пробелы), чтобы Eval правильно идентифицировал значение словаря. Как только вы объяснили этот метод, я смог расширить словарь и добавил несколько вещей, что просто потрясающе. Я боюсь, что кто-то введет "камеру" вместо "камер", поэтому словарь будет нуждаться в элементе обоих
.Добавить("Камера ",Рисунок.Цвет.синий) и
.Добавить("Камеры ",Рисунок.Цвет.синий) для того, чтобы достичь того же самого аффекта. Я попытался использовать Eval, чтобы сказать: "если(не ColorTranslator.ContainsValue(sVal), ..." и играл с различными способами сказать "нравится или содержит", использовал подстановочные знаки, но не мог понять синтаксис. Знаете ли вы, как достичь этой цели?

Maciej Los

Нет никакого способа, чтобы обойти его, используя widlcards. Вы должны добавить все ключи и соответствующие значения. С другой стороны, слово "камера" является частью слова "камеры". Таким образом, вы можете передать подстроку длиной 6 в словарь. ;)

Member 13895589

"передайте подстроку длиной 6 в словарь"... заявление
Dim sVal As String = DataBinder.Eval(e.Row.DataItem, "SwitchPort1").Метод toString()
e.Row.Cells(3).BackColor = If(не ColorTranslator.ContainsKey(sVal), рисунок.Цвет.Зеленый, ColorTranslator(sVal))


в настоящее время тянет только то, что находится в поле... таким образом, если есть 5 пробелов, замыкающих видимые символы, оператор eval не находит значение в словаре. Итак, если я не получу "камеры" с 3 пробелами в конце, поиск завершится неудачей. Как передать определенную длину символа?

Я понимаю концепцию LEN(... но не тогда, когда также пытаюсь оценить данные.

Maciej Los

Dim sVal As String = DataBinder.Eval(e.Row.DataItem, "SwitchPort1").ToString().Trim().Substring(0,6)

Member 13895589

Ну, это ошибка как детали исключения: система.Argumentoutofrangeexception: индекс и длина должны указывать на позицию в строке.
Имя параметра: длина

Я просто добавлю возможности и оставлю вас в покое. Вы мне очень помогли, и я ценю вашу помощь!! Большое спасибо!

Maciej Los

Удачи вам!
Овации,
Мацей