|
|
|
I have my DAL raise events for logging progress, but a consumer could attach a handler that updates a ProgressBar if it wanted.
|
|
|
|
|
Good afternoon.
I have the following code in my DAL.cs:
private ucTabs ucT = new ucTabs();
private Timer time = new Timer();
private void InitializeMyTimer()
{
time.Interval = 250;
time.Tick += new EventHandler(IncreaseProgressBar);
time.Start();
}
private void IncreaseProgressBar(object sender, EventArgs e)
{
ucT.tsProgBar.Increment(25);
ucT.tslStatus.Text = ucT.tsProgBar.Value.ToString() + "% Completed";
if (ucT.tsProgBar.Value == ucT.tsProgBar.Maximum)
time.Stop();
}
public void importStuff()
{
InitializeMyTimer();
}
Can't seem to get the Progress bar to move at all. Any suggestions? WHEELS
|
|
|
|
|
I have one doubt regarding this? Why are you doing all those stuff in Data Adapter Layer ? You should display the progress only On UI layer itself. User background wroker thread to call the DAL method. which will show the progress of execution. If you are doing all these stuff in DAL, where are you retruning the value to UI?
cheers,
Abhijit
CodeProject MVP
Web Site:abhijitjana.net
When you ask a question, remember to click "Good Answer", If the Answer is helps you.
|
|
|
|
|
Good morning Abhijit.
I am calling an import method (which call several other import methods) from the form class.
I am also referncing the form's progres bar and label in the DAL.
I had some difficultly getting the background worker thread to work.
You would think there was a simple way to accomplist what I am trying to do.
WHEELS
|
|
|
|
|
Wheels012 wrote: time.Tick += new EventHandler(IncreaseProgressBar);
Instead I would do something like:
dal.OnProgress += IncreaseProgressBar ;
Bear in mind that when using a thread to do the work, IncreaseProgressBar will need to check InvokeRequired and call Invoke if needed.
This way, when the dal has an update, it will execute IncreaseProgressBar itself without having to know what it does or why.
If you haven't learned events[^] yet, this would be a good time.
|
|
|
|
|
I have created a class object to diplay information.
It is a Panel with a Button on it.
When the Button is pressed it process some data and displays the data on the Panel on Labels, etc.
The end result (After clicking a Button on my DisplayClass)is a value that I want passed back to the Form that has my DisplayClass on.
I had though that I could pass a pointer to a function to my Display class and have it call it that would drive code on my main form, but I can't figure it out.
TestDisplay = new UsageDisplayPanelClass();
TestDisplay.Location = new System....
TestDisplay.Size = new Syste....
TestDisplay.Click += new System.EventHandler(TestDisplayClick);
The Click event never gets back to my main program because it is captured through a Button.Click in my TestDisplay Class
Is there a way to have both my Class handle the button click then have the event resent to my main program?
Thank you in Advance
Douglas
|
|
|
|
|
Hi,
in .NET the producer typically offers a public event, to which consumers can subscribe using a event+=delegate like syntax. A delegate basically is a function pointer, so the producer when meeting some conditions will call all the delegates added to the corresponding event.
I would suggest you read up on both keywords. The key factor is you add your own event which fits the application domain (e.g. CalculationsDone).
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.
|
|
|
|
|
If you have already declared a Click event in your custom class like your code suggests, all you need to do is forward the event from the button to the event you created.
In UsageDisplayPanelClass, you will have something like this where Click is the custom event you defined:
private void ButtonClickHandler(object sender, EventArgs e)
{
if (Click != null)
{
Click(this, e);
}
}
|
|
|
|
|
<pre>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Data.Sql;
using Dotnet67.Sales.DAL;
using Dotnet67.Sales.Items;
using Dotnet67.Sales.Persons;
using System.Data.SqlClient;
namespace Dotnet67.Sales.DAL
{
public class DALHelper
{
private readonly string CONSTRING3 = "CASHIER1";
public void InsertIntoCashier(string[] str,int[] val)
{
SqlConnection con = new SqlConnection("server=.; Database=Dotnet67;uid=sa;pwd=123;");
SqlCommand com = new SqlCommand(this.CONSTRING3, con);
com.CommandType = CommandType.StoredProcedure;
com.Parameters.AddWithValue("@CashierID", val[0]);
com.Parameters.AddWithValue("@CashierName", str[0]);
con.Open();
try
{
com.ExecuteNonQuery();
}
finally
{
con.Close();
}
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Dotnet67.Sales.DAL;
using Dotnet67.CommonTypes;
using Dotnet67.WinControls;
using System.Data.Sql;
using System.Data.SqlClient;
namespace Dotnet67.Sales.WinUI
{
public partial class ManageCashier : Form
{
public ManageCashier()
{
InitializeComponent();
}
private void btnClose_Click(object sender, EventArgs e)
{
this.Close();
}
private void ManageCashier_Load(object sender, EventArgs e)
{
// TODO: This line of code loads data into the 'dotnet67DataSet8.Cashier_2' table. You can move, or remove it, as needed.
this.cashier_2TableAdapter.Fill(this.dotnet67DataSet8.Cashier_2);
}
//This is the button for inserting values into grid view which is running perfect.
private void btnInsertIntoDataBase_Click(object sender, EventArgs e)
{
DALHelper dH = new DALHelper();
ManageCashier mc = new ManageCashier();
string[] str = new string[3];
int[] values = new int[3];
str[0] = txtName.Text;
dH.InsertIntoCashier(str,values);
dataGridView1.Refresh();
dataGridView1.RefreshEdit();
this.cashier_2TableAdapter.Fill(this.dotnet67DataSet8.Cashier_2);
//dataGridView1.AllowUserToDeleteRows.ToString();
}
//WHAT SHOULD I WRITE HERE IN THE BODY OF THE FOLLOWING BUTTON TO DELETE SUCCESSFULLY
private void btnDeleteFromGridViewAndDatabase_Click(object sender, EventArgs e)
{
SqlConnection conn = new SqlConnection("server=.; Database=Dotnet67;uid=sa;pwd=123;");
string stro ="DELETE FROM Cashier_2 WHERE CashierID='0'" ;
SqlCommand sqlDelete = conn.CreateCommand();
//sqlDelete.CommandText = "DELETE FROM Cashier_2 WHERE CashierID= '@cashierIDDataGridViewTextBoxColumn'";
sqlDelete.CommandText = "DELETE FROM Cashier_2 WHERE CashierID= '@CashierID'";
conn.Open();
sqlDelete.ExecuteNonQuery();
conn.Close();
}
THE FOLLOWING IS THE STORED PROCEDURE I WROTE FOR DELETING PURPOSE.
SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[UET]
@CashierID nvarchar(50)
AS
BEGIN
DELETE FROM [dbo].[Cashiers] // DELETE from Table_Name where Coloumn=''
WHERE CashierID='@CashierID'
END
return
</pre>
Kindly if anyone could send me the code for this scenario.
I am using a data grid view which loads the data from the database table. My database table has only two attributes i.e, CashierID and CashierName. Now in my grid view placed on the form has an extra column i.e., the check box column. Now I want the user to check the rows he wants to delete and after checking the check boxes when he clicks the Delete button on the form then not only the selected values be deleted from the grid but also from the database table as well.<b></b>
|
|
|
|
|
Check this google result.[^]
I Love T-SQL
"Don't torture yourself,let the life to do it for you."
If my post helps you kindly save my time by voting my post.
modified on Wednesday, July 22, 2009 2:58 PM
|
|
|
|
|
Hello All,
any idea why SendKeys.SendWait("{ENTER}") would restore a textbox to a previous state instead of submitting it? The problem cannot be reproduced manually, it submits every time. I do not have source control of the textbox or it's form, but should be able to submit it this way.
Thanks in advance.
|
|
|
|
|
I am not quite clear what you are saying, but I have one experience with SendKeys. I was trying to built a Bluetooth remote control and was using SendKeys to pass shortcut keys to Media Player. During testing I put this code behind a windows form button event and it works only first time then do nothing. But when I interfaced it to application and there were no UI event to trigger it it worked great. May be it helps you.
|
|
|
|
|
I am trying to grab the HTML source of a web page using the WebBrowser control. The page in question allows the user to query out a specific record (or set of records) from a database. Once these records have been listed, the user clicks on the desired title and javascript (or AJAX) overlays the current query page with the desired result display.
Problem:
If I try to programmatically grab the source, I get the original query page, not the overlayed desired result object. I can right click on the result and view source correctly but I can't seem to get it via code.
Anyone out there solved this issue in the past?
|
|
|
|
|
|
Michael Potter wrote: I am trying to grab the HTML source of a web page using the WebBrowser control.
I don't know what your requirements are but making an HTTP Request will get you the HTML code. It's far simpler than using a WebBrowser Control. You can use many different Base Class items to do this, one is the HttpWebRequest Class[^]
|
|
|
|
|
Thanks for the response.
I can't hide the functionality of the website I wish to scrape. I need its query interface to function as designed. I just can't get to the result source HTML. I am guessing it is inserted somewhere in the DOM but, I failed to locate it.
Essentially, a small square 'frame' appears (via java script) in the center if the page. If I right click on the small square 'frame' and choose [view source], I get what I want. If I right click OFF the small square 'frame' and choose [view source], I get the intial query HTML. I can't find the small square 'frame's HTML programically.
|
|
|
|
|
Michael Potter wrote: I can't hide the functionality of the website I wish to scrape.
Not sure what that means but if you must use a WebBrowser Control you could still use the URL from the control to make separate HTTP Requests to obtain the HTML. If you are trying to capture the dynamic changes to the DOM from any client side script then of course that will not help you.
Michael Potter wrote: I am guessing it is inserted somewhere in the DOM
Yes the DOM is the in memory version of the HTML. Again if you want the original stream from the server then just make a HTTP Request. If you need the dynamic HTML you will have to use the DOM. You will have to dig through the DOM documentation to find the parts you need. The basic concept is that each Frame has a Body and a Body element might give you access to the Inner HTML as Text.
|
|
|
|
|
Is the "frame" an iFrame? If it is that would explain your problem. An iFrame hold it's contents in it's own innerHTMl property so it wouldn't come back from the webbrowsers.Document.InnerHTML.
If at first you don't succeed ... post it on The Code Project and Pray.
|
|
|
|
|
After some javascript research - yes it is an IFrame.
I was able to capture the navigated URL and use HttpWebRequest (thanks led mike) to re-grab the IFrame when it is unsecured. I am unable to do so when it is secured data. I can't seem to hitch onto the rights the WebBrowser object has negotiated and I don't know how to negotiate a new set (I am not privy to the sites inner workings).
So the problem remains but, is better defined. How do I read an IFrame's source from the WebBrowser control?
|
|
|
|
|
What I would do, I'm sure there is a better way, is just append a JavaScript function and a hidden textbox to the innerHTML of the loaded document.
then call InvokeScript on the webbrowser to run your JavaScript (which should set the hidden textboxs text to the inner HTML of the iframe) then get the text from the textbox by getting the innerhtml and parsing out the textbox value.
Like I said I'm sure there is a better way.
If at first you don't succeed ... post it on The Code Project and Pray.
|
|
|
|
|
Any idea on what the script would look like? I have not done a lot of web programming.
|
|
|
|
|
Found this on the net that allowed me to use HttpWebRequest (as suggested earlier).
http://mmarinov.blogspot.com/2007/10/using-exsiting-ie-cookies-with.html[^]
Thanks for all those that helped - refining the definition of the problem was very helpful.
Special Note: The WPF WebBrowser control doesn't even fire the events (IFrame navigation) necessary for the above solution. I have to use the Windows Forms version.
modified on Friday, July 24, 2009 2:07 PM
|
|
|
|
|
Public class MyClass<t> where T:int
{
}
why it's giving error. why .net framework not supporting
|
|
|
|