Удаление полной строки из сетки, когда строка удовлетворяет условию

Я пытаюсь удалить полную строку из GridView, если она удовлетворяет условию.

Здесь у меня есть

a Description Column from Product table in database, которым заполняется GridView.

Я установил sqlcommand в своем приложении vb только на select the Description which does not contain the String s.

Здесь String s has two keywords "Tomatoes" and "Apple". Таким образом, запрос Sql должен получить файл Description column that does not have "Tomatoes" and "Apple".

Поэтому Gridview следует обновить, удалив строки, удовлетворяющие условию.

Я столкнулся с трудностями при удалении

Description row in GridViewв котором есть "Помидоры" и "Яблоки". Я попытался заполнить другой GridView результатами, но он не отображается на веб-странице, несмотря на то, что все правильно, потому что я видел значения, в которых я указал некоторые точки останова. Любые предложения или мысли?

Вот мой код:

Dim cmd1 = New SqlCommand(" SELECT DISTINCT [Description] FROM [Product] WHERE ([Description] LIKE '%' + @Description + '%')", conn)
                        cmd1.Parameters.AddWithValue("@Description", s)

         MsgBox("NO")

         For i As Integer = 0 To GridView1.Rows.Count - 1
         DA.SelectCommand = cmd1
         DA.Fill(dt)

         'row is of a GridViewRow datatype As GridView1.Rows
          row.Cells.RemoveAt(i) '' do not know if it is correct or not

         'GridView3.DataSource = '' dt tried with no luck
         'GridView3.DataBind() '' tried with no luck
          cmd1.Dispose()
          DA.Dispose()
          dt.Clear()
          dt.Dispose()
         Next
       End If

person HShbib    schedule 12.12.2012    source источник
comment
Более правильной реализацией было бы удаление строк из источника данных GridView с последующим вызовом DataBind(), а не удаление данных из GridView после того, как они уже загружены. См. ветку здесь.   -  person SWalters    schedule 12.12.2012
comment
@SandraWalters Итак, как я могу удалить только строку из gridview, потому что я не хочу удалять исходный Description из sqlDataSource, а только из GridView   -  person HShbib    schedule 12.12.2012


Ответы (2)


Вы все еще можете изменить источник данных, не изменяя оригинал. Вы заполняете свою переменную «dt» данными из базы данных. Затем прокрутите его с помощью чего-то вроде

    var stuffIActuallyWantInMyGrid = new List<DataSet>(); //A list of whatever you dt is of
    foreach(var x in dt)
    {
        if(x == WhateverMyCriteriaAre)
        {
           stuffIActuallyWantInMyGrid.Add(x);
        }
    }
    GridView3.DataSource = stuffIActuallyWantInMyGrid;
    GridView3.DataBind();

(Да, я знаю, что это код C#, но кто-то пометил этот вопрос как C# ;-)

person Mikey Mouse    schedule 12.12.2012

Если вы абсолютно должны сохранить данные в базовом источнике данных GridView, но не хотите, чтобы они отображались, одним из решений является обработка события RowDataBound в GridView. В рамках этого метода проверьте данную строку на соответствие вашим критериям; если строка совпадает, установите для ее свойства Visible значение False.

Public Sub MyGridView_RowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs)

    If e.Row.RowType = DataControlRowType.DataRow Then
        If e.Row.Cells(0).Text = "((value of row to hide))" Then
            e.Row.Visible = False
        Else
            e.Row.Visible = True
        End If
    End If

End Sub
person SWalters    schedule 12.12.2012