|
There are many ways to do this sort of thing. Two which spring to mind:
You could use a tabbed control, adding a tab for each record and placing your usercontrol on it.
You could create a host control of your own design (probably inheriting from ScrollableControl ) and add an instance of your data control for each record.
Henry Minute
Do not read medical books! You could die of a misprint. - Mark Twain
Girl: (staring) "Why do you need an icy cucumber?"
“I want to report a fraud. The government is lying to us all.”
|
|
|
|
|
Hi Henry,
Thank you for your reply.
The second way is the way i have been thinking on. But the question is when i use bindingsource it only shows one record. I do not know how to populate all records and show them all at the same time. i need a control like gridview but the design and look are too different then row/column mentality.
I have found this in Tim Franklin's page at http://pureux.com/post/2009/05/11/WinForms-Controls-and-VS-Designer.aspx[^] on Flow Layout Panel section, but i don't think it can be updatable.
Any ideas how to do that?
Thanks
|
|
|
|
|
Turquoise74 wrote: But the question is when i use bindingsource it only shows one record. I do not know how to populate all records and show them all at the same time
If you follow the logic used in the application from the link you gave, you will see that it populates its controls, sort of at the same time, by iterating over a list. I say sort of because it isn't really doing it at the same time, it just looks like that. If you read the documentation for bindingsource you will see that it has a List property.
Does that give you any ideas?
Henry Minute
Do not read medical books! You could die of a misprint. - Mark Twain
Girl: (staring) "Why do you need an icy cucumber?"
“I want to report a fraud. The government is lying to us all.”
|
|
|
|
|
No, sorry, i still dont know how to do this. The example from the link i gave just crates new controls and fills it with a loop. it does not bind them to any data source. i dont have any clue how could the control be bound to a data source and populates all datas from the source and binds every single records to a custom control even with "list" property of bindingsource.
Could you be more spesific Henry.
Thank you very much for your help.
|
|
|
|
|
You already have a bindingsource that links to your data, you just have it in the wrong place at the moment (I think).
That bindingsource contains a list, you can iterate over that list in the same way that the example iterates over its list, filling each 'Card' and adding it to a FlowLayoutPanel in the example, but you would add them to your own host control in your application.
It is your host control (yet to be designed) that should contain the main bindingsource and your 'Cards' should operate in exactly the same way as the 'Cards' in the example. I am pretty certain that that is how a DataGridView fills its rows from the one bindingsource.
Is that any clearer? Please say if not, and I will attempt to reword it.
Henry Minute
Do not read medical books! You could die of a misprint. - Mark Twain
Girl: (staring) "Why do you need an icy cucumber?"
“I want to report a fraud. The government is lying to us all.”
|
|
|
|
|
Thanks a lot.
I will try to do my best. if i can't, i will let you know.
Thank you so much again Henry.
All the best.
|
|
|
|
|
Hi again,
I got the point but i am not able to apply it.
Could you help me again.
Thanks.
|
|
|
|
|
What have you tried?
Show some of the code that doesn't work and explain what goes wrong with it, so that people can help to put you in the right direction.
Henry Minute
Do not read medical books! You could die of a misprint. - Mark Twain
Girl: (staring) "Why do you need an icy cucumber?"
“I want to report a fraud. The government is lying to us all.”
|
|
|
|
|
Thank you Henry.
I think i got it work. Whenever i complete the control i will publish here.
there are two controls
1) child
2) parent
Child control has a unbound bindingsource and some textbox which are their databinding.text property set to some columns in the database(via code), see below.
Public Sub InitializeCard(ByVal ct As DataRowView)
Me.OrderMasterID.DataBindings.Add(New System.Windows.Forms.Binding("Text", Me.BindingSource1, "OrderMasterID", True))
Me.productID.DataBindings.Add(New System.Windows.Forms.Binding("Text", Me.BindingSource1, "ProductID", True))
BindingSource1.Clear()
BindingSource1.Add(ct)
End Sub
i created new control (parent for cardcontrols) with datasource and datamember properties
added flowlayout control to this parent control
added bindingsource to parent control
and i connected a dataset to bindingsource
Whenever databindingcomplete of this bindingsource it runs PopulateCards method
Public Sub PopulateCards()
FlowLayoutPanel1.Controls.Clear()
FlowLayoutPanel1.SuspendLayout()
For x As Integer = 0 To BindingSource1.List.Count - 1
Dim card As New CardControl
card.InitializeCard(DirectCast(BindingSource1.List.Item(x), DataRowView))
FlowLayoutPanel1.Controls.Add(card)
Next
FlowLayoutPanel1.ResumeLayout()
End Sub
this basically enumerates datarowviews in the dataset
then it creates a new card for each datarowview
each datarowview get bound to bindingsource of the new created card
each controls in the card bound to card's bindingsource
and it works.
modified on Wednesday, July 8, 2009 1:36 PM
|
|
|
|
|
Good stuff!
Now that you have done that work, I might have some (very slightly) depressing news for you.
Take a look at Visual Basic Power Packs 3.0[^] on MSDN. In particular the DataRepeater control. It looks to me, from a very quick look as though it does what you want. Have a look at it anyway, even if you decide to stick with your own version, you might find some useful tips in there.
I honestly only found this a few minutes ago.
Henry Minute
Do not read medical books! You could die of a misprint. - Mark Twain
Girl: (staring) "Why do you need an icy cucumber?"
“I want to report a fraud. The government is lying to us all.”
|
|
|
|
|
I cant believe that. I looked for a repeater at first what i found was only for webforms.
This is exactly what i was looking for.
Thank you very much.
You are the best.
Kind regards,
Berkdan
|
|
|
|
|
My pleasure.
Henry Minute
Do not read medical books! You could die of a misprint. - Mark Twain
Girl: (staring) "Why do you need an icy cucumber?"
“I want to report a fraud. The government is lying to us all.”
|
|
|
|
|
unfortunatelly since datarepeater control can be either horizontal or vertical, it is not the one that i wanted to.
i am working on my own control it's almost done but i stuck on something.
Everything works fine except i cant select a card at runtime. so when the user clicks on a card bindingsource will not change the record position.
Do you know how to select child control of a usercontrol at runtime.
Thanks again.
|
|
|
|
|
Handle the 'Card' Click event (possibly in your host control**) and use something like the following:
Dim itemFound As Integer = hostBindingSource.Find("aColumnName", "Something to find")
hostBindingSource.Position = itemFound
' or all in one line (rather obvious)
hostBindingSource.Position = hostBindingSource.Find("aColumnName", "Something to find")
** this will mean that in the code that creates the 'Card' you will have to hook up the Click event to the handler method in the host:
AddHandler newCard.Click AddressOf CardClickHandler ' or similar. Please excuse any syntax errors, I don't do a lot of VB
If your hostControl ever deletes a 'Card' use:
RemoveHandler deletedCard.Click AddressOf CardClickHandler ' before actually disposing deletedCard
Hope that helps. If not please come back and I'll answer tomorrow, as I'm logging off now.
Henry Minute
Do not read medical books! You could die of a misprint. - Mark Twain
Girl: (staring) "Why do you need an icy cucumber?"
“I want to report a fraud. The government is lying to us all.”
|
|
|
|
|
yes it works with handling click event but child controls does not handle gotfocus event i think.
so far it's going well.
Thank you Henry.
Have a good day.
|
|
|
|
|
Hi
Hi I am using System.Diagonostics.Process.Start for staring a new process.
If I want to pass mulitple marameters with different switches, how can I do it?
Thanks
Fadi
|
|
|
|
|
Hi,
Process.Start expects an EXE and an argument list, both as a string.
It is very similar to the command line you would enter in a DOS window or "command prompt"
so separate with spaces, use double quotes to keep arguments that need spaces together.
Luc Pattyn [Forum Guidelines] [My Articles]
The quality and detail of your question reflects on the effectiveness of the help you are likely to get.
Show formatted code inside PRE tags, and give clear symptoms when describing a problem.
|
|
|
|
|
I had tried putting spaces. but it didn't work out.
W.r.t. ur reply, i tried putting quotes for the strings with spaces and it worked fine.....
Thank you very much Luc
|
|
|
|
|
you're welcome.
Luc Pattyn [Forum Guidelines] [My Articles]
The quality and detail of your question reflects on the effectiveness of the help you are likely to get.
Show formatted code inside PRE tags, and give clear symptoms when describing a problem.
|
|
|
|
|
Sometimes app throws an exception when I try to update one particular table adapter, exception says that it's inner sql adapter is null!
That part of code is old at least three years and it work fine until last few days, to make it even stranger when I run through the with debugger it works fine, but when I or testers run it as .exe it crashes again.
Same code is used on several places (same data layer) and it crashes only for one controller during insertion.
Controller which calls that part of code has two options for saving data, Save and Save and close. Save and close runs into problems, but Save never! Difference is only in form closing.
I haven't copied any code because it is simple someAdapter.Update(myRowCollection); .
Please help.
|
|
|
|
|
Have you tried to put Try and Catch blocks around your code to see what the exception is?
|
|
|
|
|
Almost entire method is within try-catch block.
I've explained exception in other reply.
|
|
|
|
|
What Exception? I had a similar case, in one place in my app I was lazy and used Update and all was fine until I started getting reports of a Concurrency Exception. It turned out that the guy who was generating the data I was working on created some duplicate records; he wasn't supposed to, he said he didn't, and my code couldn't handle it when he did. I changed my code so it doesn't use Update and all is fine.
All in all -- don't use DataAdapters!
|
|
|
|
|
This is the exception message:
"Object reference not set to an instance of an object."
It has no inner exception; as I said SqlDataAdapter of TableAdapter component SOMETIMES is null! However it is NEVER null when I run it through debugger, when I remove breakpoints I can expect problems.
But everything is initialized and this very code is used for some years without problems.
|
|
|
|
|
Hi,
Is there any way to set Edit Mode to all cells in a DataGridView.
My Problem is i juz wanted to show an Custom Control in DataGridView cells.
If it's possible to set all cells in edit mode, i will make my custom control as editing control of the grid to show the custom control in all cells.
Or do i have any other way to show custom controls in a DataGridViewCell with out using Graphics.
Thanks
Anbu
|
|
|
|