none
請教 DataBindingsource 的 Find 問題 RRS feed

  • 問題

  • 又來麻煩大家了  /__\

     

    今天在try一個功能  就是標題的  databindingsource 的 find 但一直出錯

    簡單說明  點選子 DataGridview 去尋找 父 DataTable 裡的資料

     

    出錯的訊息是    DataSource 上找不到 DataMember 屬性 "X_Coord"

    程式碼如下

            Dim tabA As DataTable = New DataTable("grd1")      '主 list table
            Dim tabD as DataTable = new DataTable("child")      '子table
            Private WithEvents bsD As BindingSource
            Dim dsD As New DataSet

            '以上宣告在全域變數區

            Dim tabColumn As String() = New String(1) {"X_Coord", "Y_Coord"}

            For Each element In tabColumn
                Dim col As DataColumn = New DataColumn(element)
                col.DataType = System.Type.GetType("System.String")
                col.AllowDBNull = True
                tabA.Columns.Add(col)
            Next

            dim dsD as new DataSet

            Private WithEvents bsD As BindingSource

            dsD.Tables.Add(tabA)
            bsD = New BindingSource(dsD, "grd1")

    當點選  DataGridView 時

            i = bsD.Find("X_Coord", tabD(i).Rows(e.RowIndex).Item(1))   <----就是錯在這裡  系統跟我說找不到 "X_Coord"
            If i > -1 Then
                bsD.Position = i   '用來將顯示資料label 同步
            End If

    但我在另一邊

            lblPositionX.DataBindings.Add("Text", bsD, "X_Coord")
            lblPositionY.DataBindings.Add("Text", bsD, "Y_Coord")

    這邊是可以用的,可以用按鍵指定  bsD.position = 數字     是沒問題

    卡好久了,不知道有沒有有用過的人可以幫忙指教一下   >_<

     

    • 已編輯 Rhinn 2010年7月26日 下午 03:30
    2010年7月26日 上午 09:54

解答

  • 感謝大家為我  傷腦筋

    是我自己疏忽,在這邊打的程式碼順序是沒有問題的

    但在自己的程式裡由於過長  順序發生錯亂

    將順序改過來  就可以執行了  ^^!!

            Dim tabA As DataTable = New DataTable("grd1")      '主 list table
            Dim tabD as DataTable = new DataTable("child")      '子table
            Private WithEvents bsD As BindingSource
            Dim dsD As New DataSet

            dim dsD as new DataSet

            Private WithEvents bsD As BindingSource

       
            bsD = New BindingSource(dsD, "grd1")

            dsD.Tables.Add(tabA)   <---這一行太早放了  應該放在建立完tabA   這個Table 之後

      Dim tabColumn As String() = New String(1) {"X_Coord", "Y_Coord"}

            For Each element In tabColumn
                Dim col As DataColumn = New DataColumn(element)
                col.DataType = System.Type.GetType("System.String")
                col.AllowDBNull = True
                tabA.Columns.Add(col)
            Next

            dsD.Tables.Add(tabA)   <--放在這邊才對

    當點選  DataGridView 時

            i = bsD.Find("X_Coord", tabD(i).Rows(e.RowIndex).Item(1)) 
            If i > -1 Then
                bsD.Position = i   '用來將顯示資料label 同步
            End If

    • 已標示為解答 Rhinn 2010年7月26日 下午 03:51
    2010年7月26日 下午 03:49

所有回覆

  • 你 bsDefect 的定義是什麼 ? 這樣看不出來.

    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。
    2010年7月26日 下午 02:32
    版主
  • 你 bsDefect 的定義是什麼 ? 這樣看不出來.

    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    抱歉  為了讓程式碼看起來簡單點  我把 變數做了點修改    

     

    bsDefect 就是   bsD  這個DataBindingSource

    2010年7月26日 下午 03:24
  • 感謝大家為我  傷腦筋

    是我自己疏忽,在這邊打的程式碼順序是沒有問題的

    但在自己的程式裡由於過長  順序發生錯亂

    將順序改過來  就可以執行了  ^^!!

            Dim tabA As DataTable = New DataTable("grd1")      '主 list table
            Dim tabD as DataTable = new DataTable("child")      '子table
            Private WithEvents bsD As BindingSource
            Dim dsD As New DataSet

            dim dsD as new DataSet

            Private WithEvents bsD As BindingSource

       
            bsD = New BindingSource(dsD, "grd1")

            dsD.Tables.Add(tabA)   <---這一行太早放了  應該放在建立完tabA   這個Table 之後

      Dim tabColumn As String() = New String(1) {"X_Coord", "Y_Coord"}

            For Each element In tabColumn
                Dim col As DataColumn = New DataColumn(element)
                col.DataType = System.Type.GetType("System.String")
                col.AllowDBNull = True
                tabA.Columns.Add(col)
            Next

            dsD.Tables.Add(tabA)   <--放在這邊才對

    當點選  DataGridView 時

            i = bsD.Find("X_Coord", tabD(i).Rows(e.RowIndex).Item(1)) 
            If i > -1 Then
                bsD.Position = i   '用來將顯示資料label 同步
            End If

    • 已標示為解答 Rhinn 2010年7月26日 下午 03:51
    2010年7月26日 下午 03:49