1

次のグリッドビューでは、「ID」を表示したくありませんが、それでフィルタリングする必要があります。それ、どうやったら出来るの?「IF」でフィルタリングしようとしているのに、これが機能していないことがわかりますe.Row.Cells("ID").Text = "21" か?

Imports System.Data

Partial Class Default2
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    Dim table2 As New DataTable
    ' Create four typed columns in the DataTable.
    table2.Columns.Add("ID", GetType(Integer))
    table2.Columns.Add("Drug", GetType(String))
    table2.Columns.Add("Patient", GetType(String))
    table2.Columns.Add("Date", GetType(DateTime))
    ' Add five rows with those columns filled in the DataTable.
    table2.Rows.Add(25, "Indocin", "David", DateTime.Now)
    table2.Rows.Add(50, "Enebrel", "Sam", DateTime.Now)
    table2.Rows.Add(10, "Hydralazine", "Christoff", DateTime.Now)
    table2.Rows.Add(21, "Combivent", "Janet", DateTime.Now)
    table2.Rows.Add(1100, "Dilantin", "Melanie", DateTime.Now)
    table2.Rows.Add(125, "Indocin", "David", DateTime.Now)
    table2.Rows.Add(150, "Enebrel", "Sam", DateTime.Now)
    table2.Rows.Add(110, "Hydralazine", "Christoff", DateTime.Now)

    GridView1.DataSource = table2


    Dim s_Patient As BoundField = New BoundField
    s_Patient.DataField = "Patient"
    s_Patient.HeaderText = "Patient"

    Dim s_Drug As BoundField = New BoundField
    s_Drug.DataField = "Drug"
    s_Drug.HeaderText = "Drug"

    GridView1.Columns.Clear()
    GridView1.Columns.Add(s_Patient)
    GridView1.Columns.Add(s_Drug)


    GridView1.AutoGenerateColumns = False

    GridView1.DataBind()

End Sub

Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound

    If e.Row.RowType = DataControlRowType.DataRow AndAlso (e.Row.Cells("ID").Text = "21" OrElse e.Row.Cells("ID").Text = "150") Then

        e.Row.BackColor = Drawing.Color.Blue

    End If

End Sub

エンドクラス

4

2 に答える 2

1

DataGridViewの任意の列の可視性を明示的に設定できます。グリッドのデータソースプロパティを設定すると、列にアクセスできるようになります。

Dim gridViewColumn as datagridviewcolumn = GridView1.Columns("ID")
gridViewColumn.Visible = False

フィルタについては、バインディングを再定義することをお勧めします-セットアップ:

datagridviewの場合、テーブルをデータソースとして使用します。(実際には、テーブルのDEFAULTデータビューを(「画面」の後ろで)使用しています。)

より柔軟で明確なものを使用することです:

a)明示的なバインディングソース、および

b)明示的なデータビュー、

ビューでは、次のように、フィルターを好きなように設定できます(そして実行時に変更できます)(テーブルに既にデータが入力されていると仮定します)。

dim mySort As Sting = ""
dim mySort As Sting = ""
dim mySort As Sting = ""
dim myFilter as String = "ID>23"
dim myDataView as new DataView(table2, myFilter, mySort, DataViewRowState.Currentrows)
dim myBindingSource as new BindingSource
myBindingSource.DataSource = myDataView
DataGridView1.DataSource = myBindingSource

そして再び:

DataGridview1.Columns("ID").Visible = False

ランタイムでは、DataViewのフィルター(および/または並べ替え)プロパティを変更できます。これは、グリッドが表示するものへのバインディングソースによって反映されます。

myDataView.Filter = "ID>24 AND ID<27"

ところで:グリッドのデータソースとしてデータビューを直接設定できます。

于 2012-09-07T20:32:23.270 に答える
1

このコードは私のために働いた...

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    ' only bind gridViewData once!
    If Not Page.IsPostBack Then
        ' INIT your table

        Dim s_Patient As BoundField = New BoundField
        s_Patient.DataField = "Patient"
        s_Patient.HeaderText = "Patient"
        Dim s_Drug As BoundField = New BoundField
        s_Drug.DataField = "Drug"
        s_Drug.HeaderText = "Drug"

        ' only for option 2
        GridView1.DataKeyNames = New String() {"ID"}

        GridView1.Columns.Add(s_Patient)
        GridView1.Columns.Add(s_Drug)
        GridView1.AutoGenerateColumns = False

        GridView1.DataSource = table2
        GridView1.DataBind()
    End If
End Sub

Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound
    If e.Row.RowType = DataControlRowType.DataRow Then
        ' option one: check the underlying dataRowView
        Dim row As DataRowView = CType(e.Row.DataItem, DataRowView)
        If row("ID") = "21" OrElse row("ID") = "150" Then
            e.Row.BackColor = Drawing.Color.Blue
        End If

        ' option two: check according to the current DataItemdIndex 
        '             (ie what's the dataKey, in this case ID, of the fifth element)
        Dim id As String = GridView1.DataKeys(e.Row.DataItemIndex).Value
        If id = "21" OrElse id = "150" Then
            e.Row.BackColor = Drawing.Color.Brown
        End If
    End If
End Sub

さらに、WebForms (およびdataBoundControls )の dataBinding を確認することをお勧めします。たとえば、 markup で boundFields を設定できます。

于 2012-09-07T19:55:35.010 に答える