|
Datagridview cell has a property called style which allows you to customize appearance of the cell. (BTW, it has a property called BackColor. Guess what it does )
|
|
|
|
|
Hi I have the following code
basically it is meant to increment the database value by 1
however it is not doing that it doesnt add 1 to it
any suggestions cheers
string maxquery = "Select Max(activity_order) from roomactivitylk where room_code = '" + room_code + "'";
//cmd14.ExecuteScalar();
int max = 0;
int max;
SqlCommand cmd15 = new SqlCommand();
//SqlCommand cmd15 = new SqlCommand(test0001, con);
cmd15.Connection = con;
cmd15.CommandText = maxquery;
max = (int)cmd15.ExecuteNonQuery();
max = max + 1;
++max;
max++;
|
|
|
|
|
Of course it does. All three ways of increasing the value that you have tried works just fine.
How have you come to the conclusion that it doesn't work? How are you viewing the value?
Experience is the sum of all the mistakes you have done.
|
|
|
|
|
the value that comes out the database should be 4 but for some reason appear as 1 i dont know if thtas something to do with the in
anyway when i run the same qeury in sql query analsyer it ocm4es out as 4
however running the query in c# it comes out as 1?
any clues
cheers tyhanks
|
|
|
|
|
The problem is not at all in increasing the value, but where you read the value from the database. You are not getting the value that the database returns, but the number of records that the result contains.
Use ExecuteScalar instead of ExecuteNonQuery.
Experience is the sum of all the mistakes you have done.
|
|
|
|
|
ExecuteScalar does not work it comes up with an error
|
|
|
|
|
Guffa is right on target with ExecuteScalar... What error are you getting now?
|
|
|
|
|
Specified cast is not valid. pointing at the exceutescalar
|
|
|
|
|
Thought so... Try putting it in an object instead of an int (Without casting), just for debugging, and see what type it is (Set a breakpoint and take a look at it). If it's a different numeric type, just use Convert.ToInt32() instead of a direct cast. If you're getting a DBNull or a non-numeric type, there's something wrong with your query.
Also, in light of the other branch of this thread, remember that this isn't going to modify the database. All you're doing is asking the database for a number, and incrementing your copy of that number. If you want to make a change to the database, that's a separate operation.
|
|
|
|
|
Hi
How would i set the int to the object, woudl i not declare an int at all?
cheers sp far
|
|
|
|
|
As I said, figure out what type you're getting back. If it's a different type of number (long, short, byte, float, etc), you can use Convert.ToInt32(x) to convert x into a standard int.
If you messed up the query and are getting a date, a string, a DBNull, or something weird, well then you have another bug.
|
|
|
|
|
If it is SQL Server you should use an identity and if it is oracle you should use a Sequence.
The code you have is not updating the database because ADO.NET is disconnected from the database.
"SELECT @maxValue = MAX(activity_order) FROM table WHERE clause;
UPDATE table SET activity = @maxValue + 1 WHERE clause;
"
Will do what you want (make sure to add an output parameter to the command) but it is sloppy.
Need a C# Consultant? I'm available.
Happiness in intelligent people is the rarest thing I know. -- Ernest Hemingway
|
|
|
|
|
can the above used in c#?
e.g. string maxquery2 = "SELECT @maxValue = MAX(activity_order) FROM roomactivitylk WHERE room_code = 'v1106';UPDATE roomactivitylk SET activity_order = @maxValue + 1 WHERE room_code = 'v1106';";
cheers
|
|
|
|
|
But you need to place a parameter in your command object.
Need a C# Consultant? I'm available.
Happiness in intelligent people is the rarest thing I know. -- Ernest Hemingway
|
|
|
|
|
Hi
so this statement isnt working is it cos im using an insert
string maxquery2 = "SELECT @maxValue = MAX(activity_order) FROM roomactivitylk WHERE room_code = 'v1106';INSERT INTO roomactivitylk (room_code, activity_order, instance_variant, activity_code, ignore_flag) VALUES ('" + room_code + "', @maxValue + 1, '1', '" + activity_code + "')";
??
thanksoyu
|
|
|
|
|
What are the errors?
Need a C# Consultant? I'm available.
Happiness in intelligent people is the rarest thing I know. -- Ernest Hemingway
|
|
|
|
|
it just wont insert
the appication is set to custom errors
it wont insert into the database, does ythe syntax look correct?
|
|
|
|
|
yeah, value for "ignore_flag" isnt exist
Becoming Programmer...
|
|
|
|
|
That can't be used safely anywhere. As the select and insert are executed in separate transactions, there is no guarantee that the @maxValue is still the hightest value when you use it in the insert.
Why aren't you using an identity field? It will increment automatically.
Experience is the sum of all the mistakes you have done.
|
|
|
|
|
I have a tabcontrol with say, 5 tabsheets. I would like to be able to hide one or more of these tabsheets during runtime (and make it visible again at a later stage) but can't seem to figure out how. I was hoping for something like
myTabSheet.visible = false;
but there's no such property.
Any tips? Thanks in advance.
|
|
|
|
|
The actual tab pages are separate controls that than the tab control itself.
So you can remove the tabpage from the list of tab pages the tab control has, and add it back later.
this.tabControl.TabPages.Remove(tabPage);<br />
this.tabControl.TabPages.Add(tabPage);
My current favourite word is: Bauble!
-SK Genius
|
|
|
|
|
I have deckControl that we allow users to create new deck items with. When they create a new deck item we want them to be able to enter the name for the deckitem in the textbox that we have as part of the deckitem. We give the new deckitem a default name of 'New Category' so when they create a deck item we want the textbox displayed with the name 'New Category' selected/highlighted so they can type in their name for the item.
I can get the textbox to display, but it never gets focus, so the text is not highlighted and the cursor is not in the textbox, even tho the IsFocused property is true. One thing I did notice was that the IsLoaded property is false, does this have anything to do with it? How do I force the new deck item to be loaded? The new deckItem is visibily displayed, and it is set to be the selectedItem in the deckControl. This is my first WPF project so I am sure I am missing something obvious.
As a side note the method I am calling to handle this also gets called if the user wants to rename a deckItem and it works fine on an existing deckItem, just not when they create a new deckItem.
Thanks!
modified on Friday, December 07, 2007 10:38:46 AM
|
|
|
|
|
Are you setting the focus in the constructor? If so, move it to the OnLoad event, or the OnShown event. Sometimes setting focus in the constructor doesn't do anything for some reason. Let me know if this helps.
-Jeff
|
|
|
|
|
No, I do not have the focus in the constructor, it is in the method we call to show the textbox, select the text.
Here is the code where I create the deckItem:
DeckItem item = CreateDeckPage(statLibDO);
statLibDO.Order = this.View.ControlDeck.Count;
this.View.ControlDeck.Add(item);
this.View.ControlDeck.SelectedItem = item;
EnableEditMode(this.currentDeckItem.DeckHeader as ReportTreeViewHeader);
Here is the EnableEditMode method:
private static void EnableEditMode(ReportTreeViewHeader header)
{
if (header != null)
{
header.EditHeaderText();
if (!header.HeaderEditor.IsFocused)
header.HeaderEditor.Focus();
}
}
Finally, here is the code for header.EditHeaderText that does all the work:
public void EditHeaderText()
{
//this.headerEditor.Text = this.headerText.Content.ToString();
this.headerText.Visibility = Visibility.Hidden;
this.headerEditor.Visibility = Visibility.Visible;
this.headerEditor.SelectAll();
this.headerEditor.Focus();
ReportDragDropManager.SuspendDragDropActivity = true;
}
Also, here is the code when the want to rename an existing deckItem whick works fine:
private void MenuItem_ClickRename(object sender, RoutedEventArgs e)
{
if (this.targetDeckItem != null)
EnableEditMode(this.targetDeckItem.DeckHeader as ReportTreeViewHeader);
else if (this.targetTreeViewItem != null)
EnableEditMode(this.targetTreeViewItem.ReportTreeViewItemHeader);
}
This calls the same EnableEditMode method that gets called when I create a new deckitme. The problem seems to me that the new deck item is not yet loaded (IsLoaded is false) so I am thinking that is why I can not get focus on the deck. How do I get the new deckItem loaded?
Thanks for your reply!
|
|
|
|
|
Ok, change the following and see if it changes the result:
EnableEditMode(this.currentDeckItem.DeckHeader as ReportTreeViewHeader);
-to-
EnableEditMode(item.DeckHeader as ReportTreeViewHeader);
I doubt it will, otherwise you would have seen a non-default header title as the title of the textBox. Also ensure that the ReportTreeViewHeader being passed in is NOT null. Another idea is to call "this.Refresh()", "this.View.ControlDeck.Refresh();", or "item.Refresh()", prior to and after setting the focus (try both separately, and together). If none of this works, then I really don't have any additional ideas. I think I know what the problem is, though... the textBox isn't actually displayed until the next call OnPaint method is executed. Since you set the focus prior to the textBox actually being visually created, it is not being drawn properly. Hopefully calling one of the Refresh() methods will halt execution on the main thread until the textbox's GUI has been created. This appears to be a similar problem to what I was describing with the constructor... stuff isn't drawn until AFTER the constructor yields control of the main thread to the message pump. Good luck!
-Jeff
|
|
|
|