Lusiphur 185 Practically a Posting Shark Team Colleague Featured Poster

As a side note this might work for your original code:

if (dataGridView1.Rows[e.RowIndex].Index != -1)
{
    textBox1.Text = dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString();
}
else
{
    textBox1.Text = "";
}

Edit: You'd think I could've put all that in one response, but noo... I had to go and TEST stuff between hand lol

Lusiphur 185 Practically a Posting Shark Team Colleague Featured Poster

In relation to why it's causing an issue when you click the header (using your method) that's because the header row is effectively row -1 of the dataGridView so e.RowIndex would give a value of -1 which doesn't exist within the dataGridView's dataSource.

Lusiphur 185 Practically a Posting Shark Team Colleague Featured Poster

Maybe something like this instead?

private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
    {
        textBox1.Text = dataGridView1.SelectedCells.ToString();
    }

If I read this method correctly any time someone clicks on a cell in the dataGridView it should populate the textbox with the contents of the selected cell.

Hope this helps :) Please mark as solved if your issue is resolved.

Edit: Unless you're trying to get a specific value within the row no matter which cell in the row is clicked...

Lusiphur 185 Practically a Posting Shark Team Colleague Featured Poster

Well thanks for the rep (I'm not gonna say no to good rep :P ) I dunno, it's not like it's world ending or anything. I was just curious as to how it actually works since I couldn't really find anything definitive when I tried a search about it. It seemed odd that someone who's more active and (in stats at least) more 'productive' towards helping the community would have less ability to affect rep than someone who isn't as active and such :)

Lusiphur 185 Practically a Posting Shark Team Colleague Featured Poster

Once upon a time there was a person with a lot of questions... this person had internet access, a computer, a fully functional keyboard and access to countless resources to research their answers...

As they travelled down the internet superhighway they saw a roadsign that said GOOGLE - We've got the answers you need!! but they ignored it and kept going...

Further down the road the question filled traveller came across another roadsign that said MSDN Resource Library - If you have questions, we've got answers!! but they ignored it and kept going...

Eventually this person came across the DaniWeb IT Discussion Community where a sign proudly proclaimed "We only give (homework) help to those who show effort." and they thought to themselves... "AHA!!! This is where I can go to ask for immediate answers to all my questions without having to do any work towards finding a solution myself!!"

The story hasn't ended yet but I'm sure you know how it goes :)

Lusiphur 185 Practically a Posting Shark Team Colleague Featured Poster

Ok, so I thought I kinda sorta understood the reputation thing... I thought I did...

As far as I could figure it was based partially on your own reputation, partially on your overall avtivity within the forums, partially on your status (member/moderator/etc)...

But now I'm really really confused lol.

Me:
Power to Affect Someone Else's Reputation Positively: 1 points
Power to Affect Someone Else's Reputation Negatively: -1 points

This guy:
Power to Affect Someone Else's Reputation Positively: 2 points
Power to Affect Someone Else's Reputation Negatively: -1 points

So, would it be safe to assume that how LONG you've been a member plays a role as well? Because I'm curious how someone with a total of 5 posts and a reputation level of 10 has the capacity to rate people moreso than someone with 238 posts and a reputation level of 43 :confused:

Lusiphur 185 Practically a Posting Shark Team Colleague Featured Poster

Well...

You could try parsing your stream using .Split('(',')') assuming every line has content within brackets as such:
main content details(secondary content details)

You would get a result where your string array's even values were your listbox items and it's odd values would be the richtext values.

This could be potentially achieved by:

FileInfo file = new FileInfo("C:\\available.txt");
StreamReader stRead = file.OpenText();
string readerRaw = "";
while (!stRead.EndOfStream)
    {
        readerRaw += (stRead.ReadLine());
    }
string[] readerParsed = readerRaw.Split('(',')');
for int (a = 0; a < readerParsed.Length; a++)
{
    if (a == 0 || (a % 2) == 0)
    {
        listBox3.Items.Add(readerParsed[a]);
    }
    else
    {
        ---insert logic to add readerParsed[a] to richtextbox for all odd values of a
    }
}

At least I think that would work, and again it depends on EACH line of the file being read to be in the format provided above the example.

Lusiphur 185 Practically a Posting Shark Team Colleague Featured Poster

That works too...

Only thing you'll want to be careful of there is, in the event that you're downloading on more than one occasion, you'll need to change the FileMode such that it can overwrite the existing file or add a method for creating a unique file-name if you're downloading the file again but want to keep the previous copy as well.

Currently the code you have (if I recall my filemodes correctly) will create the text file the first time around but will then encounter an error on a 2nd attempt as the file will already exist.

Other than that, glad you found a working solution :) Please don't forget to mark the thread solved if your issue is resolved.

Lusiphur 185 Practically a Posting Shark Team Colleague Featured Poster

I wonder if a combination of the while loop and break might come in handy :)

Basically a loop that is deliberately broken after the desired effect...

The concept being that it maintains it's "while" check and self terminates if the value evaluates false but also force-terminates when it completes it's initial required step.

Not sure if that makes any sense or not :-/

Lusiphur 185 Practically a Posting Shark Team Colleague Featured Poster

Let me start off by saying that I don't believe a "blanket ban" is a solution in any discussion of firearms. It has generally been shown that any attempt to completely ban something has the converse effect of causing increased interest in having/doing that thing.

Here in Canada we already have some rather strict firearms laws with regards to the ownership and transport of handguns and automatic weapons. The laws are a bit more lax with regards to hunting rifles and the like but you're still not allowed to just walk down the street with a shotgun on your arm or anything.

The laws preventing standard citizens from walking around with, for example, a handgun on their person, have done little however to prevent guns from becoming available to those who really want one and have done even less to prevent gun related violence.

I will say though that I am exceptionally glad not to be living in Texas where, it seems, they are required to post signs at the airport specifically preventing residents from carrying their guns into the airport as citizens are legally allowed to walk around with handguns strapped to their hips.

Lusiphur 185 Practically a Posting Shark Team Colleague Featured Poster

1) Please post your code to show an example of how you are currently performing the task so people can work with that sample of code to try to help you

2) In order for what I said to work you need some sort of 'trigger' for the DB query and component load procedures that occurs AFTER form load, this can be a timer, or a button or whatever works best for your needs

3) I still don't see the point in having a form load "quickly" if the functionality of the form is non-existant due to missing population of data. But then again I don't see the point in criticizing people for posting suggestions on methods without first looking into how those methods might be implemented :)

>>please firstly try your idea in your computer and then tell it to me please
I'm not going to create a database, create a form, build the data connections and fill processes, just to pre-test a 'possible' solution when the initial question didn't provide any code reference to work with but thanks for the suggestion.

Best of luck with your issue :) Please remember to mark the thread solved once it has been.

Lusiphur 185 Practically a Posting Shark Team Colleague Featured Poster

If you are dealing with a windows forms application simply move the data retrieval and population procedures to appear after the form initialization and that should get your result.

My question is, what use is an empty form showing up quickly vs a filled form showing up 2-3 seconds later? It really shouldn't take too long (depending on how large your database is and how vague your select statements are) to populate the form prior to displaying it in the first place.

Lusiphur 185 Practically a Posting Shark Team Colleague Featured Poster

It is distinctly possible that nobody who's viewed the question happens to know an answer to it off the top of their heads and that would be why you haven't received an answer. Also, not every member on this site is on 24 hours a day to check for questions the second they hit the forums.

Many questions of varying difficulty are answered successfully on this site every hour so I don't believe it's a matter of the quality of the site :)

On that note, I don't believe DirectoryInfo has the capacity to browse URLs per-se as it is designed for local/network file management.

That being said, this tutorial has some information on how to do something similar to what you're asking for, it has both VB and C# examples.

Sorry I wasn't able to Google that for you sooner.

Hope this helps :) Please remember to mark threads solved once your issue is resolved.

Edit: By the way... um... it's Saturday... Just because people are coders doesn't mean they don't have lives ;)

Lusiphur 185 Practically a Posting Shark Team Colleague Featured Poster

If I understand this correctly you're intending this process to check for isFinished == true and proceed only if it's true.

Your concern is, if the condition changes WHILE it's processing the steps within your if block, correct?

First, I'm not sure you should be using IF for the initial part of your code block but perhaps WHILE. IF will start the block and run through it once from start to finish as long as the condition existed to begin with. WHILE on the other hand will start the block and conrinue to run the block until the condition that started it changes.

Just judging by what you have within the block it looked more like you wanted a WHILE loop instead of an IF check was all... but if I'm wrong, no harm no foul, someone else will likely get your answer for you :)

Lusiphur 185 Practically a Posting Shark Team Colleague Featured Poster

Haha! Been there done that (with my own site) but... no harm no foul! :)

Lusiphur 185 Practically a Posting Shark Team Colleague Featured Poster

Don't forget to mark the thread solved if your problem is resolved by any of the above suggestions or on your own. That way people don't think the issue is ongoing :)

Lusiphur 185 Practically a Posting Shark Team Colleague Featured Poster

I really like Lusiphur's suggestion of the repeating background, keeps the site from looking too choppy.

Also, looked at your image - you have the header and footer in one image file. Doing this will always have the bottom wave underneath the text since it would be part of the body background file.

I recoded a bit (practicing my coding - have to do some for work and this site has been very helpful with giving me excellent practice and ideas).

I have uploaded the idea (very very rough - but an idea) here and posted the code below.

CSS

#bodyBG {
    margin-top: 0;
	background-color:#FFFFFF;
	background-image:url(TopWave2.gif);
	background-position:top;
	background-repeat:repeat-x;
    }
	
#header {
	font-family:Arial, Helvetica, sans-serif;
	color:#FFFFFF;
	font-size:16px;
	font-weight:bold;
	width:100%;
	height:200px;
	text-align:center;
	vertical-align:middle;
	padding-top:15px;
	}
	
	
	
#content {
    width:800px;
    margin:auto;
	font-family:Arial, Helvetica, sans-serif;
	font-size:12px;
	color:#333333;
	position:relative;
	top:0px;
	background-color:#95CAFF;
	height:500px;
	padding:10px;
    }

#footer {
	width:110%;
	height:100%
	position:absolute;
	bottom:-20px;
	left:-20px;
	background-position:bottom;
	}

#wave {
	background-image:url(BottomWave.gif);
	background-position:bottom;
	background-repeat:repeat-x;
	position:relative;
	bottom:-20px;
	left:-20px;
	height:90px;
	}

Html Code

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>SIA "Kāpieni 96"</title>
<link href="style.css" rel="stylesheet" type="text/css" />
</head>

<body id="bodyBG">

<div id="header">The page header would be here</div>

<div id="content">This section would have the main content for the site</div>

<div id="footer"><div id="wave"></div></div>
</body>
</html>

This is some excellent work there macgurl, and darnit this site just won't let me give you more rep til I give more to other people (as soon as I find posts worth giving it to …

Lusiphur 185 Practically a Posting Shark Team Colleague Featured Poster

I'm sorry if I'm just missing something here or perhaps it's glaringly obvious to everyone but me...

I've been ALL over this site trying to find some way to 'customize' which forums appear within the "My Favorite Forums" (purple bar at the footer of DaniWeb). IMHO it should be the same forums (if any) that I selected for my "Homepage Content" but it's not and nowhere in my User CP or profile can I find a way to select/remove forums from this list.

It wouldn't be so bad if not for the fact that a couple of forums I've visited only in passing have snuck in with a list of forums that I regularly frequent and, as such, render the "New Posts" and "Unanswered Threads" options useless to me since it's throwing in results from those forums as well as the ones I actually want to see.

Realistically this is forcing me to have to manually go to each of my "favorite" forums manually to look for updates which kinda defeats the purpose of the hotbar at the bottom of the site :)

So ya, anyone got a way for me to purge un-wanted "Favorite" items from "My Favorite Forums"?

Lusiphur 185 Practically a Posting Shark Team Colleague Featured Poster

Basically (as ddanbe said) your planning step is the most important step, even more so than the actual coding.

You need to work out step by step what you want to accomplish out of your program and build from there.

If you have an input value with unknown numbers of inputs (ie: any number of possible students) then perhaps you need to plan for a dynamically driven input form that expands the number of input slots based on either a selected number of inputs (user types in number of ids they want to enter) or with an "add new student number" type control which would generate a new input row in your UI.

Perhaps you loop the inputs until an escape is reached (ie: click this button when you are finished entering student id's).

Pseudocode (to give my own definition of it which might be clearer for you) involves using regular English (or your native language if not English), Flowcharts or other means to illustrate the paths your programming will take and the decision points within those paths so that you can work out any logic issues in advance, prior to entering into the coding stage.

As an example of (plain English) pseudocode:

  1. Get number of student ids
  2. Set number of available student id input rows
  3. Prompt user to enter student ids and indicate when finished (finished button?)
  4. When finished button is pressed, loop through list to verify all information has been provided, if …
ddanbe commented: Nice! +7
Lusiphur 185 Practically a Posting Shark Team Colleague Featured Poster

Glad you sorted it out :)

Lusiphur 185 Practically a Posting Shark Team Colleague Featured Poster

Pseudocode
Research
ReadMe

Thought those might help :)

Lusiphur 185 Practically a Posting Shark Team Colleague Featured Poster

I have to admit I'm drawing blanks on how to clear the items within a dataGrid. That construct was replaced by dataGridView many years ago and documentation (useful documentation) on manipulation of dataGrid items is hard to find.

Honestly, if you're using VS 2003 it might be time for an upgrade since we're now dealing with a 7 year gap in technology there.

Sorry I couldn't be more help :(

Lusiphur 185 Practically a Posting Shark Team Colleague Featured Poster

Oh ho.... dataGrid, not dataGridView...

That's why the suggestions given above don't work (Rows.Clear()) because it's a dataGrid and not a dataGridView so they have different properties.

You might have some success with .Items.Clear()... might not, doing some research on it for you at the moment.

Lusiphur 185 Practically a Posting Shark Team Colleague Featured Poster

So there's no dgresults.Items.Clear()?

Hmm... I was hoping not to have to open my VS for this one LoL give me a few min.

Lusiphur 185 Practically a Posting Shark Team Colleague Featured Poster

I believe what he's getting at is for you to put your own datagridview's name where his sample has dataGridView1.

As such:

if (this.dgresults.DataSource != null)
{
     this.dgresults.DataSource = null;
}
else
{
    this.dgresults.Rows.Clear();
}
Lusiphur 185 Practically a Posting Shark Team Colleague Featured Poster

arc64;

While many people who regularly post in this site are generally very willing to help with regards to coding issues and what not, they are generally more willing to help if some example of the code you are trying to make work is included in your original post or some attempt to research the information is shown prior to posting.

Also, it generally helps to make your title of your post reflect the nature of the problem you are having so people can gauge at-a-glance whether it's a topic they may have some experience in without having to go into every single new post in the forums. "help me plssssssssssss" does nothing to explain the issue you are having and your question shows no attempt on your part to try to gain the information by other means or to attempt the coding on your own.

Please don't take this post as a slam against you, personally. I'm just trying to give some tips to help you get the help you need. If you've attempted the coding and your code isn't working, paste the code in your question enclosed in the code tags so people can see it. If you've attempted to find the information elsewhere and are still drawing blanks, let people know where you've looked so they can see the effort was made.

As for your question... the way you've stated it it seems as though your primary option (and this depends on how …

Lusiphur 185 Practically a Posting Shark Team Colleague Featured Poster

I've got one word for you ...

Ready? ...

Here it comes ...

Google <-- iz a link to a pre-made search :cool:

Hope this helps :) Please mark solved if your issue is resolved.

Lusiphur 185 Practically a Posting Shark Team Colleague Featured Poster

You can also (if you, or someone you know, know ASP.Net programming at all) utilize this method to read from your .xls file and use the data obtained to populate various ASP dynamic control types (gridview, etc) with the information or even use ASP Labels to populate the information in the same table you're already using.

Hope this helps :) Please mark as solved if your issue is resolved.

Lusiphur 185 Practically a Posting Shark Team Colleague Featured Poster

No worries :) Just pointing it out for future reference.

Lusiphur 185 Practically a Posting Shark Team Colleague Featured Poster

I just want to clarify here... are you trying to create a webform in ASP.Net to use for viewing these document types within the browser itself (as opposed to opening them in their respective softwares such as MS Word)?

Also, most browsers utilize Adobe's reader plugin to view PDF files within the browser as it is so really all you'd need is .doc and .docx unless you're trying to embed pdf viewing within your other content.

That being said, have you done any research on this at all or are you just coming here expecting a user to spit out a stream of pre-written code for you to use?

Some quick Google searches (since I don't off the top of my head know how to go about embedding these file types into page content via ASP.Net) yielded the following results:

Hope this helps :) Please mark as solved if this resolves your issue.

Lusiphur 185 Practically a Posting Shark Team Colleague Featured Poster

Just a quick note... nothing against your requests but...

1) please phrase your post titles to give some idea of the question contained
2) please please PLEASE stop adding a line of periods at the end of every single post title you create :)

Having two identically titled posts about different problems you're having (even if they're related to the same project) is confusing to say the least and makes it look like a duplicate post at first glance through the post titles.

Lusiphur 185 Practically a Posting Shark Team Colleague Featured Poster

This should definitely do what you need if you're using Visual Studio for your development and debugging. However it only applies for remote debugging of some (not all) components of VS.

The only other way I know of debugging web-apps is to enable debugging error messages via web.config or on the individual page you're trying to debug using this method.

I'm not aware of any remote-debugging tools specific to ASP.Net web-apps unfortunately unless you can get the first debugger to work remotely for that purpose as well which the library page says it doesn't. This page indicates a couple of possible methods that might work for you however.

Hope it helps :) Please mark as solved if it resolves your issue.

Lusiphur 185 Practically a Posting Shark Team Colleague Featured Poster

LoL not only did you two post almost on top of each other but cscgal's posts managed to sneak in in the space of time it took me to type my reply :)

Lusiphur 185 Practically a Posting Shark Team Colleague Featured Poster

>> Spam posted in 1999 is still spam in 2010, if you know what I mean. :-)
Gguess so ya. As I said was just one of those 'post was at top of screen, not bottom of screen, thought it was at bottom of screen (current)' moments lol But as you said, spam is spam.

Lusiphur 185 Practically a Posting Shark Team Colleague Featured Poster

This may be a crazy thought but... um...

Completely hypothetical situation here :twisted:

Let's say that someone were to Flag Bad Post on a post that, legitimately, would have deserved it based on the forum rules as they stand... This someone was very tired and wasn't seeing things properly and thought the post had been made, say, today... But in fact the post was several months old in one of those threads that just kinda resurfaces here and there because it's an opinion type thread. Y'know, hypothetically :twisted:

There's no way for a person to un-flag their own submitted flags? (again it was a valid flag but kinda pointless if the post had been there for several months anyway)

And again, completely hypothetical here :P

Lusiphur 185 Practically a Posting Shark Team Colleague Featured Poster

Looks like you've already solved this but... erm... it's + not & for that type of usage :)

Lusiphur 185 Practically a Posting Shark Team Colleague Featured Poster

Hahaha... I got 21 emails earlier all at once from the past 2 days of subscription notifications :P

Lusiphur 185 Practically a Posting Shark Team Colleague Featured Poster

We're getting there :) Got the notification about blud's reply above but it arrived 1h13m after the post lol... but it did arrive at least (first one in a couple of days).

Lusiphur 185 Practically a Posting Shark Team Colleague Featured Poster

Solved thread count appears normal now :)

Lusiphur 185 Practically a Posting Shark Team Colleague Featured Poster

Well, Dw CS5 sells for US$399 on Adobe's website, Creative Suite 5 Web Premium for US$1,799.

You might be able to find a discounted copy of CS4 at a software retailer but as CS5 is the current offering from Adobe I don't suspect you'll get any discounts on it anywhere ;)

Lusiphur 185 Practically a Posting Shark Team Colleague Featured Poster

I just got ~1000 extra rep points, so I guess the DB problems remain?

Maybe it was all those times I bumped you for your hard work :P j/k

While we're updating this, is anyone else not getting subscription notification emails? I noticed mine stopped arriving around the same time cscgal said she'd sent out those ~200 emails but I'm not sure if it's the forum not sending them any more or if somehow, somewhere, one of the mail routers thinks daniweb is a spam source now :(

Edit: oh ya, and solved thread count on user profile page still out of whack

Lusiphur 185 Practically a Posting Shark Team Colleague Featured Poster

As an additional note, it doesn't hurt to read the forums a bit to see if your question was already asked in a different way and is possibly already being addressed by other users :)

Hope this helps put you in the right direction. Please mark solved if this resolves your issue.

Lusiphur 185 Practically a Posting Shark Team Colleague Featured Poster

Hmm... if you want the repeating waves at the bottom of the page always, you could try adding "background-position:bottom;" to the #BG id in your CSS file. This should push the background (tiling horizontally) to the bottom of the DIV, in which case your #BodyBG background-color should likely be #000 (black) to match the top of the wave tiles.

Edit: just a design note, you may want to trim a bit off the left or right of your wave tile to match the lines up a bit :)

Lusiphur 185 Practically a Posting Shark Team Colleague Featured Poster

I see... well.. unless you have a collection of items (read: collection of arrays) this becomes difficult.

What I might recommend for you to do is look up setting up collection classes. What you will likely need to do is create a collection of arrays. The joy of collections is they can be expanded dynamically based on the number of items added to them so that at that stage your initial loop will become a loop through the collection to determine how many arrays there are and set up the required additional loops dynamically based on that information.

As for the coding of that... it's 4:17am and I'm not up for it :)

Lusiphur 185 Practically a Posting Shark Team Colleague Featured Poster

I was tossing the only thing I could find in there since I, also, don't know of anything in .Net that does "exactly" what they're looking for. You can't expect all of my posts to be gold can you? :P

Lusiphur 185 Practically a Posting Shark Team Colleague Featured Poster

Um... what I provided is how you achieve it when the count is not known at coding...

If you read my loops you see that they are generated based on variable figures (ie: i.Length) meaning that the loops will determine how many items are in the array and loop the according number of times to completely cover all iterations if the array.

If you knew the count ahead of time you'd do something more like

for (int a = 0; a < 16; a++)

instead of

for (int a = 0; a < i.Length; a ++)

Hope this helps make more sense of it :) Please remember to mark as solved if your issue is resolved.

Lusiphur 185 Practically a Posting Shark Team Colleague Featured Poster

First, this should be in the Web Development > ASP.Net forum :)

That being said, you will need some sort of a trigger event to populate the gridview once the textBox has information in it or if it is populated based off the textBox value at page load it will error out unless you have a default SELECT statement that runs at page load.

How I would handle it is to have the data connection, SELECT process and gridView population triggered via a button click.

Your select statement part of your connection procedure can be phrased as:
"SELECT * FROM customers WHERE ID = '" + textBox1.Text + "'"

The rest I leave in your capable hands.

Hope this helps :) Please mark as solved if it resolves your issue.

Lusiphur 185 Practically a Posting Shark Team Colleague Featured Poster

hahaha Too true... In this case I felt some pity (because this type of nested looping CAN be a bit of a headache for a newbie) but not in this case over here. :)

Lusiphur 185 Practically a Posting Shark Team Colleague Featured Poster

Also, to keep DaniWeb a student-friendly place to learn, don't expect quick solutions to your homework. We'll help you get started and exchange algorithm ideas, but only if you show that you're willing to put in effort as well.

Do you have any code examples of your attempts to do this task? Perhaps we can help you figure out where you're stuck at a certain point :)

Also, try this reference in relation to the System.Drawing namespace and it's usage.

As well as this reference which presents a tutorial in the use of the System.Drawing namespace.

And pretty much 90% of the things that come up when you use Google to do a bit of research :)

Hope this helps :) Please mark as solved if this resolves your issue.

Lusiphur 185 Practically a Posting Shark Team Colleague Featured Poster

You can use foreach loops nested within each other for this.

Personally I'm not a fan of foreach (because it always gives me a headache).

I would do something like this:

string outCombos = "";
for (int a = 0; a < i.Length; a++) // cycle through array "i"
{
    for (int b = 0; b < j.Length; b++) // cycle through array "j"
    {
        for (int c = 0; c < k.Length; c++) // cycle through array "k"
        {
            // append new combination values to string "outCombos"
            outCombos += "(" + i[a].ToString() + "," + j[b].ToString() + "," + k[c].ToString() + "),";
        }
    }
}
outCombos.Remove(outCombos.Length - 2); // clips off the last character (",")

Hope this helps :) Please mark solved if this resolves your issue.

((I was going to post this an hour ago but my phone company decided it would be a good time to perform a "DSL Conversion" for my entire area effectively killing my phone, internet and TV for an hour :@ ))