Почему моя анонимная функция не срабатывает на grid.prerender?

В моем gridview у меня есть поля для вставки новой записи в нижний колонтитул.

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

    ...
    If result.ItemCount = 0 Then
        result = mockRow
        AddHandler mygridview.PreRender, AddressOf HideRow
    End If
End Sub

Private Sub HideRow(ByVal sender as Object, ByVal e as EventArgs)
    mygridview.Rows(0).Visible = False
End Sub

Это прекрасно работает. Тем не менее, я хотел бы сжать это так:

    ...
    If result.ItemCount = 0 Then
        result = mockRow
        AddHandler mygridview.PreRender, Function() mygridview.Rows(0).Visible = False
    End If
End Sub

Это компилируется нормально, но строка не скрывается. Может ли кто-нибудь сказать мне, почему моя анонимная функция не работает?


person adam0101    schedule 23.04.2010    source источник
comment
Рассмотрите возможность использования элемента управления Listview. Он отображает столбец вставки для вас. msdn.microsoft.com/en-us/library/bb515103.aspx Прокрутите вниз, чтобы увидеть рисунок.   -  person Raj Kaimal    schedule 23.04.2010


Ответы (3)


Проблема в том, что вы создаете функцию, которая возвращает логическое значение вместо присвоения значения. Если вы используете VB 2008, вы застряли, но с VB 2010 вы можете вместо этого сделать подпрограмму.

AddHandler mygridview.PreRender, Sub() mygridview.Rows(0).Visible = False
person Gideon Engelberth    schedule 24.04.2010

Вам не нужно добавлять параметры?

AddHandler mygridview.PreRender, _ 
   Function(sender as Object, e as EventArgs) mygridview.Rows(0).Visible = False
person Glennular    schedule 23.04.2010
comment
Он должен быть в состоянии вывести их. Я пробовал и то, и другое. Все еще не работает. - person adam0101; 24.04.2010

Это то, что вам нужно:

AddHandler mygridview.PreRender, Sub(sender as Object, e as EventArgs) mygridview.Rows(0).Visible = False

Итак, вы оба были правы наполовину.

person Bryan    schedule 13.07.2010