|
Than you for your reply Eddy.
I will try to provide additional data concerning the issue I'm dealing with.
I have a root List called "eqtlist" which is composed of items called eqtlist1. Each eqtlist1 contains itself another List (eqtlist2). And each eqtlist 2 is composed of items called eqtlist3.
The idea is to build a treeview containing the details of that implementation. For that purpose, I need to access individually each item of that collection in order to get its name which will be displayed as an item of the treeview.
All this information is stored in a library called EqtListDataBase. My code allows me to access the first (eqtlist) and the second (eqtlevel1) levels. But when trying to go further, I get the NullReference error.
|
|
|
|
|
Member 13511312 wrote: But when trying to go further, I get the NullReference error. Which you need to investigate; one of those objects you are referencing on that line does not exist. Meaning it results in "null" and not in an object you expect.
Taking the usual suspects, "EqtListDataBase" could throw such an exception, but is probably initialized correctly, otherwise it would have crashed sooner. If the length of the array was incorrect, is would have crashed on the previous line.
What is the method called "GetSetOfEqtLevel2" returning? An array?
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
|
|
|
|
|
Yes, GetSetOfEqtLevel2 returns an array of eqtlevel2.
By running step by step the application in the console mode, I've pointed out that the issue comes from the eqtlevel2 items which dont have eqtlevel3 elements.
Lets consider the following example:
eqtlist: 2 items of type eqtlevel1 {eqtlevel1a and eqtlevel1b}
eqtlevel1a: 3 items of type eqtlevel2 {1a.eqtlevel2.1; 1a.eqtlevel2.2 and 1a.eqtlevel2.3}
1a.eqtlevel2.1: 1 item of type eqtlevel3 {1a.2.1.eqtlevel3}
eqtlevel1b: 1 item of type eqtlevel2 {1b.eqtlevel2.1}
In such a case the application will display the NullReference error when trying to get objects of type eqtlevel3 for 1b.eqtlevel2.1 since it hasn't any sublevel item.
Now the problem is slightly different. How I can prevent this error when reaching objects which have not sublevel items since the same method has to be applied whitout knowing in advance the content of the pointed objects?
Thank again for your availability.
RV
|
|
|
|
|
The problem seems to be solved by putting the block:
if(eqtlevel2 !=null)
{
foreach (EqtLevel2 eqtl2 in eqtlevel2)
{
Console.WriteLine(eqtl2.EqtLevel2Name);
}
}
Console.ReadLine();
ahead of the incriminated line.
Thank you again.
|
|
|
|
|
Hahaha; yes, I was looking at the wrong line; it is not the line that you state that goes wrong, but the line after that;
EqtLevel2[] eqtlevel2 = EqtListDataBase.GetSetOfEqtLevel2(eqtlevel1[i]);
for (int j = 0; j < eqtlevel2.Length; j++) If your eqtlevel2 is null, then it is not possible to fetch its "Length" property. That would be the source of the nullreference-exception, and the stacktrace should reflect that.
Instead of having a check whether or not the method returns null, I'd prefer the method to return an empty array or list instead of null. That way you can enumerate it even if it is empty, without having to check if it is null or not.
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
|
|
|
|
|
This is one of the most common problems we get asked, and it's also the one we are least equipped to answer, but you are most equipped to answer yourself.
Let me just explain what the error means: You have tried to use a variable, property, or a method return value but it contains null - which means that there is no instance of a class in the variable.
It's a bit like a pocket: you have a pocket in your shirt, which you use to hold a pen. If you reach into the pocket and find there isn't a pen there, you can't sign your name on a piece of paper - and you will get very funny looks if you try! The empty pocket is giving you a null value (no pen here!) so you can't do anything that you would normally do once you retrieved your pen. Why is it empty? That's the question - it may be that you forgot to pick up your pen when you left the house this morning, or possibly you left the pen in the pocket of yesterdays shirt when you took it off last night.
We can't tell, because we weren't there, and even more importantly, we can't even see your shirt, much less what is in the pocket!
Back to computers, and you have done the same thing, somehow - and we can't see your code, much less run it and find out what contains null when it shouldn't.
But you can - and Visual Studio will help you here. Run your program in the debugger and when it fails, VS will show you the line it found the problem on. You can then start looking at the various parts of it to see what value is null and start looking back through your code to find out why. So put a breakpoint at the beginning of the method containing the error line, and run your program from the start again. This time, VS will stop before the error, and let you examine what is going on by stepping through the code looking at your values.
But we can't do that - we don't have your code, we don't know how to use it if we did have it, we don't have your data. So try it - and see how much information you can find out!
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
Thank you for your reply OriginalGriff.
I've provided additional details in the messages above.
It seems that the problem has just been solved.
I've written the following line for preventing the application for execution the incriminated line by putting the following instruction:
if(eqtlevel2 !=null)
{
foreach (EqtLevel2 eqtl2 in eqtlevel2)
{
Console.WriteLine(eqtl2.EqtLevel2Name);
}
}
Console.ReadLine();
Thank you again.
RV
|
|
|
|
|
You're welcome!
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
Hi guys, I have a question about Microsoft Report Viewer C #. So my problem is this: I have a report generated with the previous version of the report viewer, now I have updated the current version of the report viewer, but now when I modify a report this xmlns is set with the report version 2016, The problem is that it does not work! how do I make sure the xmlns link does not update?

|
|
|
|
|
Bit of a long winded question I'm afraid.
I have an app which sends data to an open document displayed by an app such as Word, using a simple paste operation. This requires that I locate the handle of the window associated with the document. The user configures the file location of the application that displays the document, and the file location of the document.
Obtaining the window handle is usually quite easy using something like this:
using (var searcher = new System.Management.ManagementObjectSearcher("SELECT ProcessId, ExecutablePath FROM Win32_Process"))
{
using (var results = searcher.Get())
{
foreach (System.Management.ManagementObject item in results)
{
string ExecutablePath = (string)item["ExecutablePath"];
if (!string.IsNullOrEmpty(ExecutablePath) && (ExecutablePath == _destinationApplication.DestinationApplicationPath))
{
int processID = (int)(uint)item["ProcessId"];
System.Diagnostics.Process process = System.Diagnostics.Process.GetProcessById(processID);
if ((process != null) && process.MainWindowTitle.Contains(documentTitle))
{
return process.MainWindowHandle;
}
}
}
}
}
Unfortunately Microsoft Word is a pain as one instance manages multiple open documents. Calling GetWindowText() on the main window handle gets the name of one document. Using Spy to look at the window tree for Word shows that none of the child windows store the name of the other document as the window text, even though I can see the name of the document displayed by a window.
So, how do I locate the handle of the window in which the second document is displayed?
|
|
|
|
|
|
Unfortunately that does not work as I cannot reliably identify which window belongs to the target document. And yes I do already use that method to enumerate through the child windows.
|
|
|
|
|
I have a table in SQL DB as such:
tblSoftwareCount with
3 Columns shown below for example with no identity (ID)Column:
Software, Count, Domain
Ms office| 1 | MSCom
I need help with C# code that will go and only delete the rows in the "tblSoftwareCount"
with the Column (Domain)(Value "MSCom")
So if the tblSoftwareCount had 100 records, I need the C# windows form code to only
delete the rows that have the Column (Domain) (Value "MSCom")
So something like
var Domain = labelDname.Text;
{
SqlCommand cmd = new SqlCommand("DELETE values ( Domain = labelDname.Text where Domain ....
Something to that effect. I need to pull the value from the labelDname.Text to include in the sql query used to delete the rows in the tblSoftwareCount in the Sql Sever Database.
|
|
|
|
|
DELETE
FROM tblWhatsitsName
WHERE Columname = @value You set the condition in SQL. Use a parameterized query, Google has examples
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
|
|
|
|
|
HI, i have a report viewer use dataparameter to filter data, please help me refresh it, no need close form.
|
|
|
|
|
Just fetch the data again. Which report-viewer? The one from MS? Does that even support changing data whilst viewing?
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
|
|
|
|
|
hi. thanks you! i use reportview of MS, i use dataset to bind into reportviewer. i need only close the form and open again that can refresh new dataset but it is not best for user, can you help me rebind dataset directly in this form, maybe refresh by another button such as refresh button. Thanks
|
|
|
|
|
Again, does the report-control support that scenario?
Do you have a small application to test that? If not, I suggest you start there. "Not closing" the form could be done by clearing all the controls on it and creating them again; would still mean that the form is repainting and flashing.
A report is usually a "print-preview", and that is not something that is usually updated on the fly, as it needs to be rendered anew by the printer-driver.
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
|
|
|
|
|
Hi
Here is my code: please help me reset the form
public Bihourlyforline()
{
InitializeComponent();
}
private void Bihourlyforline_Load(object sender, EventArgs e)
{
// TODO: This line of code loads data into the 'trainningDBDataSetforbihourly1.viewBiHourly3' table. You can move, or remove it, as needed.
this.viewBiHourly3TableAdapter.Fill(this.trainningDBDataSetforbihourly1.viewBiHourly3);
// TODO: This line of code loads data into the 'trainningDBDataSetforbihourly1.tblLine' table. You can move, or remove it, as needed.
this.tblLineTableAdapter.Fill(this.trainningDBDataSetforbihourly1.tblLine);
// TODO: This line of code loads data into the 'trainningDBDataSetforbihourly1.tblLine' table. You can move, or remove it, as needed.
this.tblLineTableAdapter.Fill(this.trainningDBDataSetforbihourly1.tblLine);
this.reportViewer1.RefreshReport();
SetParameters(cbtimeblockline1.Text,cbtimeblockline2.Text,dateTimePicker1forlinebihourly.Text, cbline.Text);
this.reportViewer1.RefreshReport();
}
private void SetParameters(String timeblock5, String timeblock6, String date5, String line)
{
ReportParameter[] rp = new ReportParameter[4];
rp[0] = new ReportParameter("timeblock5");
rp[1] = new ReportParameter("timeblock6");
rp[2]= new ReportParameter("date5");
rp[3]= new ReportParameter("line");
rp[0].Values.Add(timeblock5);
rp[1].Values.Add(timeblock6);
rp[2].Values.Add(date5);
rp[3].Values.Add(line);
reportViewer1.LocalReport.SetParameters(rp);
}
private void btnthongkelinebi_Click(object sender, EventArgs e)
{
SetParameters(cbtimeblockline1.Text,cbtimeblockline2.Text,dateTimePicker1forlinebihourly.Text, cbline.Text);
this.reportViewer1.RefreshReport();
}
}
}
|
|
|
|
|
Looks like you are filling the table in the "Form Load" event. You'd need at least to fill them again (with new data) at the moment you refresh the form.
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
|
|
|
|
|
HI. I tried to call Form Load but it didn't reflect because it's a event when we begin load form.
We can't call "
private void Bihourlyforline_Load(object sender, EventArgs e) " and also can't call "
public Bihourlyforline() ", Because both of them in the same a form
So, i think now we can only refresh dataset by a command code which i don't know. 
|
|
|
|
|
No, but you could put that code in its own method, and call that from both places.
And yes, you can raise the form_load event by hand but that would be a very bad practice. If you do want to give it a try, pass null as the sender, and EventArgs.Empty as the second argument.
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
|
|
|
|
|
Sorry, i'm not perfect the C# code, could you help me write the full code as set the Null for Event as you said?
Thanks !
|
|
|
|
|
Member 13515702 wrote: i'm not perfect the C# code Yes, well, we all have to start somewhere, and I'm still making foolish mistakes after over 10 years of experience.
You have code in the "Form_Load" event, right? You can put that code into its own method, and than call it from that event. Something like below;
private void Bihourlyforline_Load(object sender, EventArgs e)
{
this.DoLoad();
}
void DoLoad()
{
this.viewBiHourly3TableAdapter.Fill(this.trainningDBDataSetforbihourly1.viewBiHourly3);
this.tblLineTableAdapter.Fill(this.trainningDBDataSetforbihourly1.tblLine);
this.tblLineTableAdapter.Fill(this.trainningDBDataSetforbihourly1.tblLine);
this.reportViewer1.RefreshReport();
SetParameters(cbtimeblockline1.Text,cbtimeblockline2.Text,dateTimePicker1forlinebihourly.Text, cbline.Text);
this.reportViewer1.RefreshReport();
}
This way, the "Load_Form" event will just simply call the "DoLoad" method when it needs to populate the tables. Add a button, and an event-handler, and call the method from there too;
public void Button1_Click(object sender, EventArgs e)
{
this.DoLoad();
} That would execute the code in the "DoLoad" method if a button is clicked (executing the same lines that you would when you Load_Form).
That is preferred over the alternative, where you raise your "Load_Form" event manually in the OnClick of the button (see below for wrong example);
public void Button1_Click(object sender, EventArgs e)
{
this.Bihourlyforline_Load(null, EventArgs.Empty);
this.Bihourlyforline_Load(null, null);
}
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
|
|
|
|
|
Thank you for your supporting 
|
|
|
|
|