|
The registry can be edited just as easily (probably easier to the general user because of it's tree structure) as an xml file.
In case of a hard drive/OS failure, it's pretty diffucult, and sometimes impossible, to retrieve data from the registry, but because an xml file is local, it's easy to get access to for restoration purposes.
If your app is ever used on Vista, the registry works differently from previous windows versions (unless you want to bother your users with UAC prompts everytime they launch it), so it's not guarenteed to have consistant data across users even if storing in HKLM.
My advice is XML in System.Environment.SpecialFolder.CommonApplicationData + "/YourAppName/"
Dave
|
|
|
|
|
Thanks
This helps me make sense of why XML is a better choice.
Part of me was feeling like it was a step back to the good old days of ini files.
I think I will put in the small amount of effort to learn XML (it's an extra skill learned).
You always pass failure on the way to success.
|
|
|
|
|
GuyThiebaut wrote: I think I will put in the small amount of effort to learn XML (it's an extra skill learned).
While you're doing it, check out the System.Xml.Linq namespace. Most of the examples around use System.Xml but the newer stuff is pretty cool, much simpler and more powerful once you get used to it. Combining the two (XmlDocument and XDocument for example) isn't always that easy so sticking with the one namespace to begin with is a good idea.
Dave
|
|
|
|
|
DaveyM69 wrote: check out the System.Xml.Linq namespace
Thanks Dave
Will do.
You always pass failure on the way to success.
|
|
|
|
|
The theory is twofold
1 - because uninstallers do not remove registry entries, a clogged registry is one reason windows slows down with time
2 - an XML file means you can copy a folder to another machine and the app will just work
XML is just a way to give order to a text file, it's rules for parsing are standardised, but at the end of the day, it's not that different to using an .ini file. But, a clueless user who tries to edit XML, is more likely to make the file invalid, which will hinder them from doing it. But, most users who would be willing to edit an XML file, are likely to know what the registry is.
I use XML now because I agree that the registry has become a crowded neighbourhood, and that this causes users grief in the long run.
Christian Graus - Microsoft MVP - C++
"also I don't think "TranslateOneToTwoBillion OneHundredAndFortySevenMillion FourHundredAndEightyThreeThousand SixHundredAndFortySeven()" is a very good choice for a function name" - SpacixOne ( offering help to someone who really needed it ) ( spaces added for the benefit of people running at < 1280x1024 )
|
|
|
|
|
Christian Graus wrote: XML is just a way to give order to a text file, it's rules for parsing are standardised, but at the end of the day, it's not that different to using an .ini file. But, a clueless user who tries to edit XML, is more likely to make the file invalid, which will hinder them from doing it. But, most users who would be willing to edit an XML file, are likely to know what the registry is.
I 100% agree with this and if the original poster is so worried about a user editing the XML, he could just Base64 encode all the elements, attributes, and values. That way the user would have no idea what changing it would do and therefor be more inclined to just ignore the XML file.
|
|
|
|
|
Yeah, I have encrypted values I don't want the user to mess with before.
Christian Graus - Microsoft MVP - C++
"also I don't think "TranslateOneToTwoBillion OneHundredAndFortySevenMillion FourHundredAndEightyThreeThousand SixHundredAndFortySeven()" is a very good choice for a function name" - SpacixOne ( offering help to someone who really needed it ) ( spaces added for the benefit of people running at < 1280x1024 )
|
|
|
|
|
Thanks - these replies have certainly helped to change my view - XML here I come
You always pass failure on the way to success.
|
|
|
|
|
Thanks - I will take your advice on it being best in the long run.
You always pass failure on the way to success.
|
|
|
|
|
|
Thanks to everyone for the help.
I have converted the config data to XML (easy to do fortunately)and am looking into LINQ.
You always pass failure on the way to success.
|
|
|
|
|
Hello
I have a combox binded to a datatable
I did'nt find the way to find an item based on a value
Here is the way I fill the CB
string selectcmd = "SELECT PostCode FROM `address` group by PostCode ";<br />
adaCP.SelectCommand = new MySqlCommand(selectcmd, MyConn.conn);<br />
adaCP.Fill(dsCP);<br />
cmb_post.DataSource = dsCP.Tables[0];<br />
cmb_post.DisplayMember = dsCP.Tables[0].Columns[0].Caption;<br />
cmb_post.Visible = true;
I try this to find an existing item value but it return -1
cmb_post.SelectedIndex=cmb_post.Items.IndexOf(2000);
|
|
|
|
|
If you are certain that the value you're trying to select exists, this should select it for you. (Bolded lines are lines I've added or changed)
<br />
string selectcmd = "SELECT PostCode FROM `address` group by PostCode ";<br />
adaCP.SelectCommand = new MySqlCommand(selectcmd, MyConn.conn);<br />
adaCP.Fill(dsCP);<br />
cmb_post.DataSource = dsCP.Tables[0];<br />
cmb_post.ValueMember = dsCP.Tables[0].Columns[0].ColumnName;<br />
cmb_post.DisplayMember = dsCP.Tables[0].Columns[0].ColumnName;<br />
<br />
cmb_post.SelectedValue = 2000;<br />
|
|
|
|
|
Great !!
It works
I still have to understand but I'm better
I've spend the afternoon on this
Thank you
|
|
|
|
|
hi every one
am just a beginner in programming languages
so i started with c#
any way i wanna make a simple program to convert from binary to hexadecimal and so on
but I find a problem how to add zero from the lift
am sorry my question is a low level but I really want improve my programming skills
and that will be by ur helps
thank u a lot for interesting
|
|
|
|
|
|
Annoyingly enough, DataColumn.Expression doesn't support bitwise operators, so I decided to do it the long way. Also, annoyingly I can't modulo a double by an int, thus forcing me to convert to int. This leaves me with a column expression that looks like:
Convert((SomeColumn/4),'System.Int32')%2 = 1
Lo and behold my ire as I realize that the Convert function rounds the argument to its nearest whole value. Thus
3/4 = .75
Then:
Convert(.75,Int32) = 1
and
1%2 = 1
This irritates me, especially since I'm trying to work through the DataSet Designer in VS 2k5 and subsequently trying to write as little code as possible.
I've got a couple ideas for working around this - mostly involving writing in my own events or properties - but I'm curious to see if anyone has any other solutions.
|
|
|
|
|
jchalfant wrote: Lo and behold my ire as I realize that the Convert function rounds the argument to its nearest whole value.
3/4 = .75
Sound about right considering int values only hold whole numbers.
|
|
|
|
|
jchalfant wrote: I can't modulo a double by an int, thus forcing me to convert to int
just convert the int to a double then...
I am not sure I understand the problem. (4/4)%2 = 1 is correct. What are you trying to do?
|
|
|
|
|
While C# can handle double % double, ADO.Net expressions can't. I've tried that, no love. Doing so produces a MessageBox at runtime saying
Cannot perform 'Mod' operation on System.Double and System.Double.
What I'm trying to do is get around the lack of bitwise operation support in ADO.Net expressions. In doing so I was hoping to be able to easily bind some control properties to boolean values in a datatable whose values are determined by an expression (somecolumn/somenumber)%2=1. Unfortunately I don't think this is possible.
Oh, and the title, is an oops. What I meant was 3/4%2.
|
|
|
|
|
jchalfant wrote: What I meant was 3/4%2.
That makes sense.
Maybe you can return the boolean values directly in your result set or however you retrieve them.
|
|
|
|
|
That's one of my conclusions.
But what I think I'll do instead is manually add the column to the datarow and evaluate the value based on other column values. I'm not pressed for time on this project, so I've got time to play around and do different things.
|
|
|
|
|
Perhaps you should explain what it is that you are trying to accomplish, rather than asking about why the workaround that you think might be the solution doesn't work as expected...
Despite everything, the person most likely to be fooling you next is yourself.
|
|
|
|
|
Your words of encouragement enlighten me...
To summize what I've already said:
Bitwise operation on the DataColumn Expression property to be used with boolean properties on databound controls.
At any rate, I've determined that it ain't gonna happen through the dataset designer. Any sentiments of wanting to assist are much appreciated.
|
|
|
|
|
Hi,
Not sure why SomeColumn would be a double to start with.
assuming your SomeColumn actually holds an integer value, FIRST convert it to int,
then start processing its bits.
Probably a simple if (intValueOfSomeColumn & 4 != 0) ... does exactly what you want...
Luc Pattyn [Forum Guidelines] [My Articles]
This month's tips:
- before you ask a question here, search CodeProject, then Google;
- the quality and detail of your question reflects on the effectiveness of the help you are likely to get;
- use PRE tags to preserve formatting when showing multi-line code snippets.
|
|
|
|