|
|
There is no way to absolutely prevent a user from logging off or shutting down the system.
Even the solution you found is a "suggestion" that the system not shutdown. There is nothing you can do to prevent it as everything you come up with can be defeated just by ending the process that is your application.
|
|
|
|
|
Yes, I understand that. The intention is to remind people to do their housekeeping before logging off, perhaps even to annoy them into it.
|
|
|
|
|
here is my code, i want just the client may print when click in printing_button the the printer print directly, how can i modify my code?
void report()
{
cnx = new SqlConnection(db.RXcon);
try
{
cnx.Open();
string cg=" SELECT * from my_table where NumFact=" + @Convert.ToInt32(textBox4.Text);
commd2 = new SqlCommand(cg);
commd2.Connection = cnx;
DataSet dts = new DataSet();
DataTable dt = new DataTable();
dtr = commd2.ExecuteReader();
dt.Load(dtr);
FactCons c2 = new FactCons();
c2.SetDataSource(dt);
crystalReportViewer1.ReportSource = c2;
c2.SetDatabaseLogon("sa", "789456");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
cnx.Close();
}
with these codes, you have first to preview, but i want to jump previewing please
|
|
|
|
|
A couple of things unrelated to your question:
1) Never use Convert methods on user input: users mistype, and Convert will throw an exception on errors. Always check user input using the TryParse method instead:
void report()
{
int fact;
if (!int.TryParse(textBox4.text, out fact))
{
... report input problem to user ...
return;
}
2) Do yourself a favour, and stop using Visual Studio default names for everything - you may remember that "TextBox8" is the mobile number today, but when you have to modify it in three weeks time, will you then? Use descriptive names - "tbMobileNo" for example - and your code becomes easier to read, more self documenting, easier to maintain - and surprisingly quicker to code because Intellisense can get to to "tbMobile" in three keystrokes, where "TextBox8" takes thinking about and 8 keystrokes...
3) Never concatenate strings to build a SQL command. It leaves you wide open to accidental or deliberate SQL Injection attack which can destroy your entire database. Always use Parameterized queries instead.
When you concatenate strings, you cause problems because SQL receives commands like:
SELECT * FROM MyTable WHERE StreetAddress = 'Baker's Wood' The quote the user added terminates the string as far as SQL is concerned and you get problems. But it could be worse. If I come along and type this instead: "x';DROP TABLE MyTable;--" Then SQL receives a very different command:
SELECT * FROM MyTable WHERE StreetAddress = 'x';DROP TABLE MyTable; Which SQL sees as three separate commands:
SELECT * FROM MyTable WHERE StreetAddress = 'x'; A perfectly valid SELECT
DROP TABLE MyTable; A perfectly valid "delete the table" command
And everything else is a comment.
So it does: selects any matching rows, deletes the table from the DB, and ignores anything else.
So ALWAYS use parameterized queries! Or be prepared to restore your DB from backup frequently. You do take backups regularly, don't you?
OK, in this example it wouldn't cause a problem, but you need to check every single other access in your application - miss one, and you are at risk. It's a very,. very good idea to get into the habit or always using parameterized queries, even when you don't have to - that way future changes are safer.
4) SqlConnections, SqlCommands, and so forth are scarce resources: you should ensure that they are Disposed when you are finished with them - the best way is to just use a using block for each constructor - the object will be disposed automatically when it goes out of scope.
As far as your actual question goes, we can't help based on the code you show: it doesn't display the report at all, just set up some conditions for it to be displayed or printed. You need to look elsewhere in your code to find out exactly what happens from that point.
Sent from my Amstrad PC 1640
Never throw anything away, Griff
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
thank alot about your respond, but the real problem is that my code works correctly and previewing also give possibilty to print and i did test many printing, my need is how to send information directly to the printer without previewing PLEASE
look the first image shows information to print https://ibb.co/3RXh6Ks
the second show the preview https://ibb.co/vzrvWfF possibility of printing
|
|
|
|
|
As I said:
Quote: As far as your actual question goes, we can't help based on the code you show: it doesn't display the report at all, just set up some conditions for it to be displayed or printed. You need to look elsewhere in your code to find out exactly what happens from that point.
Sent from my Amstrad PC 1640
Never throw anything away, Griff
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
My need is with my code, How to send it directly to the printer in the place of previewing please,
|
|
|
|
|
What part of
Quote: As far as your actual question goes, we can't help based on the code you show: it doesn't display the report at all, just set up some conditions for it to be displayed or printed. You need to look elsewhere in your code to find out exactly what happens from that point.
Do you not understand?
Sent from my Amstrad PC 1640
Never throw anything away, Griff
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
Of courses yes i don't understand yu, cuz i said that my codes displayed and you can print but i want to jump this step of previewing i don't know how to print it. some thing like
cryRpt.PrintToPrinter(1, true, 1, 1);
|
|
|
|
|
Look at the actual code you showed us.
Where in that does it actually print or print preview anything? what part of that code actually causes a print preview to appear on the screen?
Have a good close look. I'll wait.
Sent from my Amstrad PC 1640
Never throw anything away, Griff
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
when I click on the button: prnt_btn I call on my function :report {}
it means i have a button wich call my report
|
|
|
|
|
This has "long day" written all over it ...
I'm sure that you do. But which line of code in the fragment you showed us actually does the print preview?
Now, I'm guessing - and guessing is all I can do here, since I can't see your screen, access your HDD, or read your mind: we only get exactly what you type to work with - that it's one of these:
c2.SetDataSource(dt);
crystalReportViewer1.ReportSource = c2;
c2.SetDatabaseLogon("sa", "789456");
Or possibly something that happens after the call to the report method.
But ... I don't have the code for your FactCons class. I don't have the code that calls report . So I need you to actually do the work and find out - because without it, there isn't anything I can do, other than bang my head on the desk because it "feels so good when I stop" ...
Sent from my Amstrad PC 1640
Never throw anything away, Griff
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
dt.Load(dtr);
FactCons c2 = new FactCons();
c2.SetDataSource(dt);
crystalReportViewer1.ReportSource = c2;
c2.SetDatabaseLogon("sa", "123456");
|
|
|
|
|
desk *bang*
desk *bang*
desk *bang*
Ahhhh ...
Is there any point in me typing anything? Since you don't seem to be listening at all?
Sent from my Amstrad PC 1640
Never throw anything away, Griff
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
at least my code print invoice by previewing, but as i speak french may be i don't catch you, all my codes work correctly and till now we use and print the invoice with crystal by previewing when call the method report...... but what you said i don't find idea in my question. my method report works
|
|
|
|
|
Yes, but the code which actually does the "heavy lifting" is part of your FactCons class which we have no access to!
Sent from my Amstrad PC 1640
Never throw anything away, Griff
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
You need to understand when you are beaten.
|
|
|
|
|
I'm trying to avoid getting to the "never argue online with idiots and script kiddies" moment.
I genuinely think he has no idea what he is doing, and is trying to cover that up with a lack of thinking. We'll get there ... probably.
Sent from my Amstrad PC 1640
Never throw anything away, Griff
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
sorry about your way of thinking, why insult when yourself do not understand a request?OriginalGriff wrote:
I genuinely think he has no idea what he is doing
sorry,try to read the last proposition that is what i was asking as RobF_83 he gave an answer corect
|
|
|
|
|
private void butt_prnt_Click(object sender, EventArgs e)
{
report();
}
void report()
{
cnx = new SqlConnection(db.RXcon);
try
{
cnx.Open();
string cg=" SELECT * from Consultation where NumFact=" + @Convert.ToInt32(textBox4.Text);
commd2 = new SqlCommand(cg);
commd2.Connection = cnx;
DataSet dts = new DataSet();
DataTable dt = new DataTable();
dtr = commd2.ExecuteReader();
dt.Load(dtr);
FactCons c2 = new FactCons();
c2.SetDataSource(dt);
crystalReportViewer1.ReportSource = c2;
c2.SetDatabaseLogon("sa", "789654");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
cnx.Close();
}
|
|
|
|
|
crystalReportViewer1.ReportSource = c2; is the line that actually loads the report into the report control.
You need to replace that with this:
c2.PrintToPrinter(1, true, 0, 0)
You should also place it AFTER
c2.SetDatabaseLogon("sa", "789654");
|
|
|
|
|
thank you alot you has understood my request, i'll give you the result tomorrow
RobF_83 wrote: is the line that actually loads the report into the report control.
You need to replace that with this:
c2.PrintToPrinter(1, true, 0, 0)
You should also place it AFTER
c2.SetDatabaseLogon("sa", "789654");
|
|
|
|
|
Thank you verry much RobF_83
here is solution
void report()
{
cnx = new SqlConnection(db.RXcon);
try
{
cnx.Open();
string cg=" SELECT * from Consultation where NumFact=" + @Convert.ToInt32(textBox4.Text);
commd2 = new SqlCommand(cg);
commd2.Connection = cnx;
DataSet dts = new DataSet();
DataTable dt = new DataTable();
dtr = commd2.ExecuteReader();
dt.Load(dtr);
FactCons c2 = new FactCons();
c2.SetDataSource(dt);
crystalReportViewer1.ReportSource = c2;
c2.SetDatabaseLogon("sa", "765432");
c2.PrintToPrinter(1, true,0, 0);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
cnx.Close();
}
|
|
|
|
|
thanks in advance
modified 22-Aug-19 22:17pm.
|
|
|
|