tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルDataGridコントロールでの並び替えやフィルタ指定
記事No2118
投稿日: 2005/09/13(Tue) 09:13
投稿者
[OSのVer]:WindowsXP   [VBのVer]:VB.NET2003
TEXTBOXの値でDataGrid内のデータの並び替えやフィルタ指定をしたいのですが
DataGridコントロールで並び替えやフィルタ指定は可能なのでしょうか?

[ツリー表示へ]
タイトルRe: DataGridコントロールでの並び替えやフィルタ指定
記事No2120
投稿日: 2005/09/13(Tue) 10:48
投稿者なおこ(・∀・)
お世話になります。

> TEXTBOXの値でDataGrid内のデータの並び替えやフィルタ指定をしたいのですが
> DataGridコントロールで並び替えやフィルタ指定は可能なのでしょうか?

DataGridコントロールのDataSourceかDataMemberから
DataTableを取り出して、DataTable.selectでソートするとか。
であれば、可能だと思います。

hhttp://www.microsoft.com/japan/msdn/library/default.asp?
url=/japan/msdn/library/ja/cpref/html/frlrfsystemdatadatatableclassselecttopic3.asp

[ツリー表示へ]
タイトルRe^2: DataGridコントロールでの並び替えやフィルタ指定
記事No2130
投稿日: 2005/09/14(Wed) 10:09
投稿者
解答ありがとうございます。
DataGridの抽出条件にTextbox内のデータで範囲絞込をしたいのですが
Me.OleDbDataAdapter.SelectCommand.CommandText = "SELECT 文字列, 数列, 内容 FROM 判定 WHE
RE 数
列>100 and 文字列 =Me.TextBox5.Text"
と記入しましても"1つ以上の必要なパラメータの値が設定されていません"と表示されます
が、
なぜこの様なエラーが発生するか判らない為、教えて頂きたく思います。

[ツリー表示へ]
タイトルRe^3: DataGridコントロールでの並び替えやフィルタ指定
記事No2132
投稿日: 2005/09/14(Wed) 10:36
投稿者なおこ(・∀・)
お世話になります。

hhttp://www.microsoft.com/japan/msdn/library/default.asp?
url=/japan/msdn/library/ja/cpguide/html/cpconusingparameterswithdataadapters.asp
を見ると、
SelectCommand.CommandTextには
「文字列, 数列, 内容 FROM 判定 WHERE 数列>100 and 文字列 = ?」
と記述し、
SelectCommand.Parameters.Add
でMe.TextBox5.Textの値を追加してやる必要がありそうです。

[ツリー表示へ]
タイトルRe^4: DataGridコントロールでの並び替えやフィルタ指定
記事No2133
投稿日: 2005/09/14(Wed) 14:45
投稿者
ありがとうございます。
見て実行してみたのですけれど、よく分からなくて…
もっと簡単に判定できる方法ってないものでしょうか?

[ツリー表示へ]
タイトルRe^5: DataGridコントロールでの並び替えやフィルタ指定
記事No2135
投稿日: 2005/09/14(Wed) 17:15
投稿者なおこ(・∀・)
お世話になります。

> 見て実行してみたのですけれど、よく分からなくて…
> もっと簡単に判定できる方法ってないものでしょうか?

簡単と感じられるかどうかわかりませんが、
こんな方法もあります。

■以下のコードを実行するに当たっての準備
FormにDataGrid1を貼り付け。Button1、Button2、TextBox1を貼り付け。
データベースc:\northwind.mdbを用意。適当なSQLServerから、Ordersテーブルをインポート。

以下、コード
===============================================================================
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
        '*** DataBaseからデータ取得 ここから
        Dim nwindConn As System.Data.OleDb.OleDbConnection = New
System.Data.OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" & _
                                                       "Data Source=c:\northwind.mdb;")
        Dim selectCMD As System.Data.OleDb.OleDbCommand = New System.Data.OleDb.OleDbCommand
("SELECT * FROM Orders", nwindConn)
        selectCMD.CommandTimeout = 30

        Dim DA As System.Data.OleDb.OleDbDataAdapter = New System.Data.OleDb.OleDbDataAdapter
        DA.SelectCommand = selectCMD

        nwindConn.Open()

        Dim DS As DataSet = New DataSet
        DA.Fill(DS, "Orders")

        nwindConn.Close()
        '*** DataBaseからデータ取得 ここまで

        Dim DT As DataTable = DS.Tables("Orders")
        Me.DataGrid1.DataSource = DT

    End Sub

    Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles
Button1.Click
        'EmployeeIDでソート
        Dim DT As DataTable = CType(Me.DataGrid1.DataSource, DataTable)
        Dim rows As DataRow() = DT.Select("", "EmployeeID")
        Dim newDT As DataTable = DT.Clone()
        For Each row As DataRow In rows
            newDT.ImportRow(row)
        Next

        '再表示
        Me.DataGrid1.DataSource = newDT
        Me.DataGrid1.Refresh()
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button2.Click
        'Textboxの値で絞込み & EmployeeIDでソート
        Dim DT As DataTable = CType(Me.DataGrid1.DataSource, DataTable)
        Dim rows As DataRow() = DT.Select("Freight >= " + Me.TextBox1.Text, "EmployeeID")
        Dim newDT As DataTable = DT.Clone()
        For Each row As DataRow In rows
            newDT.ImportRow(row)
        Next

        '再表示
        Me.DataGrid1.DataSource = newDT
        Me.DataGrid1.Refresh()
    End Sub

[ツリー表示へ]