• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 407
  • Last Modified:

Help with saving data to Datatable and displaying data in listbox

Hi,

I am using the code below to include data in a Datatable to display in a listbox, problem is
eventhough the dta is found in two records (part B), my DataTable contains 5 rows instead
of two rows, apparently I am getting a row for each natch but I need a row for each record. Based on data in Part B, my Datatable should contain:

Row1 102,104,105
Row2 102,104

Instead I am getting
Row1 102,
Row2 104
Row3 105
Row4 102
Row5 104


The code below gives me the following error:

"Complex DataBinding accepts as a data source either an IList or an IListSource."

For example if C1Ctry.SelectedValue.ToString = 1
For Each xnLink As Xml.XmlNode In xdLink.SelectNodes("/Root/LinkA[Ctry_ID='" & C1Ctry.SelectedValue.ToString & "']")
            Link_ID = xnLink.SelectSingleNode("LinkAID").InnerText

‘Retreive data

  For Each xnNSN As Xml.XmlNode In xdNSN.SelectNodes("/Root/NSNTable[contains('," & NSNID & ",', concat(',', NSN_ID, ','))]")
                NSNID2 = xnNSN.SelectSingleNode("NSN_ID").InnerText
                Name = xnNSN.SelectSingleNode("NSN").InnerText
                dtNSN.Rows.Add({NSNID2, Name})
                utubeNSN = "," & Name
            Next

          ‘Display data
C1NSN.Items.Clear()
C1NSN.DataSource = dtNSN.Rows(0) ' Error
 C1NSN.DisplayMember = "NSN"
 C1NSN.ValueMember = "NSN_ID"
Next


Part B
<LinkA>
    <LinkAID>1</LinkAID>
    <crty_ID>1</ctry_ID>
       <NSN_ID>1,2,5</NSN_ID>
      </LinkA>
<LinkA>
    <LinkAID>2</LinkAID>
    <ctry_ID>1</ctry_ID>
     <NSN_ID>1,2</NSN_ID>
     </LinkA>


How do I modify the code to obtain the data in the right number of rows and How do I move to the next row to display the right record?

Thanks,

Victor
0
vcharles
Asked:
vcharles
  • 5
1 Solution
 
Miguel OzSoftware EngineerCommented:
Some notes form code above:
- The node "NSN" does not exists in your xml. Thus the binding will fail.
- The error occurs because you are trying to bind to the row not the data table. (I assume dtNSN)
    C1NSN.DataSource = dtNSN

Questions:
1. What are the correct C1NSN.DisplayMember  and  C1NSN.ValueMember for the C1NSN?
2. Do you really need a datatable? if you just need to read xml we can use linq to to xml as shown below:
http://stackoverflow.com/questions/2805477/parse-xml-and-populate-in-list-box
(Translation available on request)
0
 
vcharlesAuthor Commented:
Hi,
C1NSN.DisplayMember  is = NSN and C1NSN.ValueMember NSN_ID. I would like to use a datatable to store multiple rows (one row per record) to be able to use Next and Prvious buttons to move through the rows. Probloem is when I use C1NSN.DataSource = dtNSN I get
all rows, but I only one to display the first row in the listbox, the other problem is, the code is returning 5 rows, when it should only return two rows as explained in my initial post.

How do I only see one row for each record? as shown in part B I only have two records, but the  datatable contains 5 rows.

Thanks,

V.
0
 
vcharlesAuthor Commented:
Hi,

Below is the code that worked with the web version. How do I replace session in the Windows version?

 Public Function SearchCtry()

  Dim xdNSN As New Xml.XmlDocument
  xdNSN.Load(Server.MapPath("~/App_DataA/NSN.xml"))
  Dim fuze_Nsn_id As String
  Dim NSNID As String
  Dim NSNID2 As String
 
  dtMaster.Columns.Add("NSN_ID", GetType(String))
  dtMaster.Columns.Add("NSN", GetType(String))


  dtKeyMaster = New DataTable
  dtKeyMaster.Columns.Add("rowId", GetType(String))
  dtKeyMaster.Columns.Add("keyLinkAid", GetType(String))
  dtKeyMaster.Columns.Add("keyNsn", GetType(String))

  Dim rowIndex As Integer = 1

    For Each xnLink As Xml.XmlNode In xdLink.SelectNodes("/Root/LinkA[Ctry_ID='" & C1ctry.SelectedItem.Value & "']")

NSNID = xnLink.SelectSingleNode("NSN_ID").InnerText
fuze_Nsn_id = NSNID
LinkAID = Link_ID

            'For Listbox
            For Each xnNSN As Xml.XmlNode In xdNSN.SelectNodes("/Root/NSNTable[contains('," & NSNID & ",', concat(',', NSN_ID, ','))]") 'NSN.xml
                NSNID2 = xnNSN.SelectSingleNode("NSN_ID").InnerText
                If dtMaster.Select("NSN_ID in (" & NSNID2 & ")").Length = 0 Then
                    Name = xnNSN.SelectSingleNode("NSN").InnerText
                    dtMaster.Rows.Add({fuze_Nsn_id, LinkAID, NSNID2, Name})
                End If
            Next

   dtMaster.AcceptChanges()
   dtKeyMaster.Rows.Add({rowIndex, LinkAID, fuze_Nsn_id, NSSIda})
   rowIndex += 1

 Next


  Session("dtMaster") = dtMaster
  Session("dtKeyMaster") = dtKeyMaster
  ViewDataB(dtKeyMaster.Rows(0)(1), dtKeyMaster.Rows(0)(2))

End Function


Private Sub ViewDataB(ByVal keyLinkAid As String, ByVal keyNsn As String)

  Dim _table As DataView = dtMaster.DefaultView
  _table.RowFilter = "NSN_ID in (" & keyNsn & ")"
  C1NSN.DataSource = _table
 C1NSN.DataTextField = "NSN"
 C1NSN.DataValueField = "NSN_ID"
C1NSN.DataBind()
End Sub
0
Never miss a deadline with monday.com

The revolutionary project management tool is here!   Plan visually with a single glance and make sure your projects get done.

 
vcharlesAuthor Commented:
Below is the code i used in the web  version to move to the next row in the table, how do i replace Session in the Windows version?

        dtMaster = Session("dtMaster")
        dtKeyMaster = Session("dtKeyMaster")
        Dim rowId As Integer = Session("currentIndex") + 1
        ViewDataB(dtKeyMaster.Rows(rowId)(1), dtKeyMaster.Rows(rowId)(2))

I am also using the code below for datafield to move to the next row for datafields not using dtmaster but MyRowIndex can not replace Session.

 MyRowIndex = If(MyRowIndex < dtDonor.Rows.Count - 1, MyRowIndex + 1, MyRowIndex)
        C1CountryOrigin.Text = dtDonor.Rows(MyRowIndex).Item("Country")
0
 
vcharlesAuthor Commented:
Hi,

I was able to move to the next row using the following code:

  ViewDataB(dtKeyMaster.Rows(MyRowIndex)(1), dtKeyMaster.Rows(MyRowIndex)(2))

Any ideas on how to move to first and last row?


Thanks,

V.
0
 
vcharlesAuthor Commented:
Issue is resolved. Thanks.
0

Featured Post

The new generation of project management tools

With monday.com’s project management tool, you can see what everyone on your team is working in a single glance. Its intuitive dashboards are customizable, so you can create systems that work for you.

  • 5
Tackle projects and never again get stuck behind a technical roadblock.
Join Now