|
Josh Smith wrote: Handle the MouseDown event and cache a Point variable which you can use in the Click handler.
In the Click event handler you can also use the static property Control.MousePosition . Much easier .
Alternatively, controls also have a MouseClick event which gives you the position of the mouse during the click in de event handler argument.
|
|
|
|
|
I was under the impression that he wanted to know where the mouse cursor was when the click process began (i.e. when the button was depressed). Checking Control.MousePosition is good if he wants to know the cursor position after the mouse button is released (MouseDown + MouseUp = Click). I suppose he didn't state either one specifically.
Cheers,
Josh
|
|
|
|
|
I am using the Microsoft SQLHelper.cs class for my data connections. The user enters a part number, clicks a command button and the grid should load with that data. When I pass the parameter I cannot get the grid to populate. I have been working on this since Friday.
Here is my DataBind:
private void BindData()<br />
{<br />
strPartNumberInputReference = txtSearchPart.Text;<br />
ds = new DataSet();<br />
SqlParameter param = new SqlParameter("@PartID", strPartNumberInputReference); <br />
ds=SqlHelper.ExecuteDataset(this.connectionString, CommandTYpe.StoredProcedure,"dbo.GetPartInfoTest", param);<br />
Session["ds"]=ds;<br />
dt = ds.Tables[0];<br />
Session["dt"]=dt;<br />
dgParts.DataSource=dt;<br />
dgParts.DataBind();<br />
txtSearchPart.Text = "";<br />
<br />
}
I played around with the bolded line, and if I don't pass a parameter, all the stuff populates as expected.
In my stored procedure I have the following:
CREATE PROCEDURE [dbo].[GetPartInfoTest]<br />
<br />
@PartID varchar<br />
AS<br />
SELECT c.cost, ct.Description AS ctDescription, pt.description, pt.ID as PartTypeID, dd.DrawingNumber, dd.DrawingRevision, dd.DwgPath<br />
FROM costs c INNER JOIN Parts p ON c.PartID = p.Id <br />
INNER JOIN PartTypes pt on pt.ID = p.PartTypeID <br />
LEFT JOIN DraftingData dd on dd.PartID = p.ID LEFT JOIN CostTypes ct on ct.Id = c.CostTypeId<br />
<br />
where p.PartNumber = @PartID<br />
<br />
GO
Again, played around with this and changed @PartID to an actual part number and it populated fine.
I tried the debugger and it compliles fine. It says it takes the parameter and runs through the AttachParameters method (for those of you familiar with SQLHelper). But somehow it must be getting lost and the grid does not populate.
Page Load code:
private void Page_Load(object sender, System.EventArgs e)<br />
{<br />
<br />
if(Page.IsPostBack)<br />
{<br />
BindData(); <br />
<br />
<br />
}<br />
<br />
} Command button click code:
private void btnSearchPart_Click(object sender, System.EventArgs e)<br />
{<br />
BindData();<br />
}
Can someone please walk me through this to get this stupid thing to populate? At one point I got it to populate with three blank lines. Now I'm not getting anything.
|
|
|
|
|
leckey wrote: @PartID varchar
leckey wrote: where p.PartNumber = @PartID
p.PartNumber is a varchar field?
Isn't this ASP.NET? Why don't you ask in there incase you are having a timing problem?
|
|
|
|
|
Yes, it's called part number but it's alpha/numeric. I asked in here since my actual code is in C# so I thought it may be a problem with that code.
|
|
|
|
|
The war still rages, eh?
At this point, I recommend that you get back to basics (no, I don't mean quit your programming job and start farming). If I were you I would create a new app, a test app, which has three things in the GUI: a textbox, a button, and a grid. In the button's Click handler, call into your stored proc. Forget about using the SqlHelper class for now. Eliminate as many variables/unknowns as you can and try to narrow in on what the F is going on!
Best of luck,
Josh
|
|
|
|
|
I'm kind of to that point. I went back to my old one with the SQL stuff in the code behind. That pulls the data beautifully. But I'm trying to add a blank row using this:
DataTable myDataTable = new DataTable();<br />
myDataTable = ds.Tables["Rest"];<br />
DataRow row;<br />
row = myDataTable.NewRow();<br />
row.ItemArray = dt.Rows[0].ItemArray;<br />
row["PartNumber"] = DBNull.Value;<br />
myDataTable.Rows.Add(row);
This gives me
System.IndexOutOfRangeException: There is no row at position 0.
I'm basically trying to create a blank row in the main datagrid. Any ideas oh wise and wonderful Josh?
|
|
|
|
|
leckey wrote: row.ItemArray = dt.Rows[0].ItemArray;
Where did 'dt' come from? Are you certain it has rows (it doesn't look like it does)? Check that out in the debugger.
leckey wrote: I'm basically trying to create a blank row in the main datagrid. Any ideas oh wise and wonderful Josh?
Ommmmmmmmmmmmmmmmm :->
I am not an ASP.NET developer, so I can't really help you much there. I would assume that what you're doing (adding a blank row) should do the trick. If it doesn't work out, try posting to the ASP.NET forum (after checking/googling for a solution first, of course).
Josh
|
|
|
|
|
I was trying different code snippets with different naming conventions and somehow they ended up together. I fixed the stored proc stuff (giving length to varchar) and no difference. I basically have two applications: one with the SQL in code behind, and one with the SQL helper. I get the error or no row on line 0 in both cases. I did post to ASP forum so hopefully someone will pick up on it.
Funny you mention farming. Sean Penn is filming a movie close to my hometown and they did casting this weekend. But they still need people who can drive a combine. I just need a headshot!
|
|
|
|
|
leckey wrote: I get the error or no row on line 0 in both cases.
The problem must be that the table just doesn't have any rows in it. If all else fails, you can create a new DataRow and populate the Columns collection manually. Anyways, why are you trying to set the ItemArray on the new "blank" row if you want it to be blank? Setting the ItemArray will give it values.
leckey wrote: But they still need people who can drive a combine.
I hear that babes love men who drive combines in Sean Penn movies. You'll be a star, baby! Don't forget about me when you're a rich and famous Hollywood star.
|
|
|
|
|
I found about 5 articles on inserting a blank row and this method seemed the best for my needs. That's how he set it up.
Josh Smith wrote: populate the Columns collection manually
nah?
Josh Smith wrote: Setting the ItemArray will give it values
As I mentioned above, this is how the guy did it in his example...and it worked on the northwind database. Of course he was just dumping out records as opposed to filtering like me.
|
|
|
|
|
Ok - but the new row won't be blank. That's all I'm saying.
Cheers,
Josh
P.S. When you're a famous Hollywood combine driver, don't forget the little guys (like me) who helped you get there.
|
|
|
|
|
leckey wrote: @PartID varchar
Shouldn't the varchar have a size assigned to it? e.g varchar(64)
Or does your stored-procedure only take one character as its parameter?
Michael
CP Blog [^] Development Blog [^]
|
|
|
|
|
Good catch!
|
|
|
|
|
Yes, I did forget to assign a size to it. I have fixed that but trying something else now. My main problem now is I am trying to add a new line to the grid and keep getting "no row at position 0." i'm clicking a button to insert the line...
DataTable dt = ds.Tables["Rest"];<br />
DataRow row;<br />
row = dt.NewRow();<br />
row.ItemArray = dt.Rows[0].ItemArray;<br />
row["PartNumber"] = strPartNumberInputReference;
|
|
|
|
|
Have you verified that dt.Rows.Count is not 0?
|
|
|
|
|
um, no. That's probably it. Since they are hitting the add part button, there is no data in the datagrid yet. I'm wondering if I can bind a blank datagrid so it technically has a row, or if it is just null.
|
|
|
|
|
leckey wrote: row.ItemArray = dt.Rows[0].ItemArray;
row["PartNumber"] = strPartNumberInputReference;
Why are you trying to assign the values of row 0 to the new row?
When there is no data in the table, you won't have a row 0
Can't you just do
row = dt.NewRow();
row["PartNumber"] = strPartNumberInputReference;
dt.Rows.Add(row)
Michael
CP Blog [^] Development Blog [^]
|
|
|
|
|
Okay, at least got it to compile and have a blank row. However, not showing what I entered in the textbox in the PartNumber column.
DataTable dt = ds.Tables["Rest"];<br />
DataRow row;<br />
row = dt.NewRow();<br />
strPartNumberInputReference = txtPartNumberInput.Text;<br />
row["PartNumber"] = strPartNumberInputReference;
Just shows blank. Any ideas?
|
|
|
|
|
leckey wrote: DataTable dt = ds.Tables["Rest"];
DataRow row;
row = dt.NewRow();
strPartNumberInputReference = txtPartNumberInput.Text;
row["PartNumber"] = strPartNumberInputReference;
Just shows blank. Any ideas?
After the call to dt.Rows.Add(row), is the information in the DataTable?
Michael
CP Blog [^] Development Blog [^]
|
|
|
|
|
Let me try to explain what is happening.
In the text box enter '123' and click the Search button.
Nothing for '123' so grid comes back empty. Just the headers.
Click the second button 'add part' and that's where I want it to add a new line, with the column part number filled with that '123' entry.
I'm not sure what I did now. When I click the 'add part' a row does show up, but it is returning data that has nothing to do with the entry.
|
|
|
|
|
leckey wrote: I'm not sure what I did now. When I click the 'add part' a row does show up, but it is returning data that has nothing to do with the entry.
What data is it returning? Data that is in the table or some other.
I use similar techniques to what you are trying a lot and haven't had this problem. Is this an ASP.NET or WinForms app?
Is it the display that is wrong or is it the actual datatable? When you put a watch on the DataTable, does it get the correct data in the new row.?
Michael
CP Blog [^] Development Blog [^]
|
|
|
|
|
I'm having problems with creating a process to show a webpage, and the object returned not having a valid handle. The page loads fine in all instances, but without a working handle I'm stuck on some activities to perform on the open window. I'm stumped as to the pattern involved. This seems to not work at boot, and at some point spontainiously begin providing a handle and then continue to do so for the remainder of the session. Once it started working hte only time it stopped again was after I un/redocked my laptop to attend a meeting. Any thoughts on what's going on here?
m_helpBrowser = new Process();
m_helpBrowser.StartInfo.FileName = "IExplore.exe";
m_helpBrowser.StartInfo.Arguments = indexPath;
m_helpBrowser.Start();
if (this.m_helpBrowser.MainWindowHandle.ToInt32() == 0)
MessageBox.Show("browser opened with no handle");
|
|
|
|
|
Hi!
Seems to be a timing problem.
Immediately after the process has been started, IE sometimes doesn't seem to have had enough time to create the main window, so you'll get IntPtr.Zero .
The documentation for Process.MainWindowHandles suggests calling Process.WaitForInputIdle to make sure the process had enough time to start up completely.
Regards,
mav
--
Black holes are the places where god divided by 0...
|
|
|
|
|
Adding the WaitForInputIdle call's removed the null handle problem, instead I'm occasionally getting an "invalid window handle" error when using the win32 api call GetWindowThreadProcessId and passing the process handle. The handle number my error catcher displays appears to be a random int. Eventually it spontainiously starts working again.
-- modified at 16:24 Monday 26th June, 2006
|
|
|
|