|
Another deleted post???
...No, just someone else posting the contents of thier brain
Life goes very fast. Tomorrow, today is already yesterday.
|
|
|
|
|
Had posted the post in ASP.NET, but didn't know where my post will receive more traffic, since there were C# issues involved. So I double posted! Anyway I've resolved the issue. The original post is in the ASP.NET corner.
Thanks
|
|
|
|
|
The point is that you post it where it's most applicable, NOT where you think it will get the most attention.
"Why don't you tie a kerosene-soaked rag around your ankles so the ants won't climb up and eat your candy ass..." - Dale Earnhardt, 1997 ----- "...the staggering layers of obscenity in your statement make it a work of art on so many levels." - Jason Jystad, 10/26/2001
|
|
|
|
|
Hi guys
I’m at my wits end with TreeNodes.
What i'm trying to do, to me is very simple. But for some reason I just can't get my head around it!
I’m currently working on a project where basically I’m splitting a Url address into a string array and creating each node and child node from the url segments (just like the Windows Explorer.)
\\ this is the plan
1) step through each url
string url1 = @"www.somedomain.com\home\about_us.aspx";
string url2 = @"www.somedomain.com\home\contact_us.aspx";
string url3 = @"www.somedomain.com\home\main.aspx";
2) split the current url into sections
3) process the url sections and create new nodes and child nodes or merge nodes if needed
4) output results
the final output I'm trying to get...
+ www.somedomain.com
_+ home
___+ about_us.aspx
___+ contact_us.aspx
___+ main.aspx
but in short i'm getting something like...
+ www.somedomain.com
_+ home
___+ about_us.aspx
___+ contact_us.aspx
___+ main.aspx
_+ home
___+ about_us.aspx
___+ contact_us.aspx
___+ main.aspx
Looking at the code below, Is there another way around this problem or am I just being stupid???
Any help would be very much appreciated. Please feel free to rip the hell out of my coding as I've kind of lost the plot!
Thanks again!
<pre>private void Form1_Load(object sender, EventArgs e)
{
TreeNode treeNode = new TreeNode();
treeView1.Nodes.Add(treeNode);
treeView1.PathSeparator = "\\"
// Add first url address
BuildNodes(treeNode,@"1\2\3\4\5\6\7");
// Add the next url address merging duplicate folders together...
BuildNodes(treeNode, @"1\2\4\5\6");
}</pre>
<pre>private void BuildNodes(TreeNode treeNode, string address)
{
string[] add = SplitNodes(address);
int max = add.Length;
string key = String.Empty;
TreeNode[] treeNodes = new TreeNode[max];
key = add[0];
treeNodes[0] = treeNode;
treeNodes[0].Text = add[0];
treeNodes[0].Name = key;
for (int i = 1; i < max; i++)
{
key = GetKey(key, add[i]);
treeNodes[i] = new TreeNode();
treeNodes[i].Text = add[i];
treeNodes[i].Name = key;
TreeNode[] tns = treeNodes[i - 1].Nodes.Find(treeNodes[i].Name, true);
// if node exists skip it else add the new node
if (tns.Length == 0)//if
{
treeNodes[i - 1].Nodes.Add(treeNodes[i]);
}
}
}</pre>
<pre>private string GetKey(string key, string value)
{
string delimiter = treeView1.PathSeparator;
if (key == String.Empty)
return value;
else
return String.Format(@"{0}{1}{2}", key, delimiter, value);
}</pre>
<pre>private string[] SplitNodes(string nodeString)
{
char[] delimiter = treeView1.PathSeparator.ToCharArray();
return nodeString.Split(delimiter, StringSplitOptions.RemoveEmptyEntries);
}
</pre>
<div class="ForumMod">modified on Friday, March 27, 2009 12:01 PM</div>
|
|
|
|
|
heres an idea... should do the job anyway...
void CreateNodes(string[] urls)
{
foreach(string url in urls)
{
string[] splits = url.Split('\\');
TreeNode temp = GetNode(splits[0], TreeView.Nodes);
if(temp == null)
temp = TreeView.Nodes.Add(splits[0]);
for(int i = 1; i < splits.Length; i++)
{
temp = GetNode(splits[i], temp.Nodes);
if(temp == null)
temp = temp.Nodes.Add(splits[i]);
}
}
}
TreeNode GetNode(string text, TreeNodeCollections nodes)
{
foreach(TreeNode n in nodes)
if(n.Text == text)
return n;
return null;
}
Life goes very fast. Tomorrow, today is already yesterday.
modified on Friday, March 27, 2009 12:47 PM
|
|
|
|
|
Thank you so much musefan, I'll give it a go!
|
|
|
|
|
Looked very promising, but the code you sent was creating each url folder as a root node.
It wasn’t breaking them down into child or grandchild nodes.
ps i'm using c#.net framework 3.5
here's the code you sent... I had to modify it slightly.
private void Form1_Load(object sender, EventArgs e)
{
TreeNode tn = new TreeNode();
treeView1.Nodes.Add(tn);
string[] urls = new string[2];
urls[0] = "a\\b\\c\\d";
urls[1] = "a\\b\\e\\f";
CreateNodes(urls);
}
void CreateNodes(string[] urls)
{
foreach (string url in urls)
{
string[] splits = url.Split('\\');
TreeNode temp = GetNode(splits[0], treeView1.Nodes);
if (temp == null)
temp = treeView1.Nodes.Add(splits[0]);
for (int i = 1; i < splits.Length; i++)
{
TreeNode temp2 = GetNode(splits[i], temp.Nodes);
if (temp2 == null)
temp2 = treeView1.Nodes.Add(splits[i]);
}
}
}
TreeNode GetNode(string text, TreeNodeCollection nodes)
{
TreeNode result = null;
foreach (TreeNode n in nodes)
if (n.Text == text)
{
result = n;
break;
}
return result;
}
|
|
|
|
|
where you have put temp2 is wrong it was not meant to be another instance. see my other post for edited code
Life goes very fast. Tomorrow, today is already yesterday.
|
|
|
|
|
Sorry mate, just noticed that!
I've corrected temp2 as your right, it shouldn't be a new instance. I've re-tested the code but for some reason it's still populating the root nodes only???
I think i'll give it a rest for a bit and take another look later (with a fresh head); cos the code
i'm looking at, to me should work.
void CreateNodes(string[] urls)
{
foreach (string url in urls)
{
string[] splits = url.Split('\\');
TreeNode temp = GetNode(splits[0], treeView1.Nodes);
if (temp == null)
temp = treeView1.Nodes.Add(splits[0]);
for (int i = 1; i < splits.Length; i++)
{
temp = GetNode(splits[i], temp.Nodes);
if (temp == null)
temp = treeView1.Nodes.Add(splits[i]);
}
}
|
|
|
|
|
check out new edit lol
Life goes very fast. Tomorrow, today is already yesterday.
|
|
|
|
|
lol
My heads gone! I can't believe I've been beaten by the humble TreeView!
And yet my web crawler is a hell of a lot more complex than that...
I guess i'll take the walk of shame!! lol
i'll look at it again later
Cheers again
|
|
|
|
|
I edited your code slightly.
There was on error on the line:
temp = temp.Nodes.Add(splits[i]);
As temp was null so temp.Nodes was throwing an error.
private void createNodes(string[] urls)
{
foreach (string url in urls)
{
string[] splits = url.Split('\\');
if (splits.Length > 0)
{
TreeNode temp;
if ((temp = GetNode(splits[0], this.treeView1.Nodes) == null)
temp = this.treeView1.Nodes.Add(splits[0]);
for (int i = 1; i < splits.Length; i++)
{
TreeNode temp2;
if ((temp2 = GetNode(splits[i], temp.Nodes) == null)
temp = temp.Nodes.Add(splits[i]);
else
temp = temp2;
}
}
}
}
hmmm pie
modified on Tuesday, April 21, 2009 8:18 AM
|
|
|
|
|
Given the nature of trees in general, you might want to simplify things and go for a recursive approach. Something like this (pseudo-code):
InsertURL(TreeNode root, string url)
{
InsertURL(root, SplitNodes(url), 0)
}
InsertURL(TreeNode parent, string[] urlParts, int index)
{
TreeNode nextChild = parent.Find(urlParts[index])
If nextChild is not valid
{
Create a new node under parent corresponding to urlParts[index]
nextChild = The new node
}
if ++index < urlParts.Length
{
InsertURL(nextChild, urlParts, index)
}
}
(Yes, I know the syntax isn't proper C#. That's intentional, so ya don't try to copy-paste and compile it )
Notes:
1) The array gets passed as a reference, so it's faster to just send the whole array to each recursive call instead of stripping out each part as we place it.
2) Note the ++ in the last comparison. Increment it, THEN see if the new value is in-bounds, then recurse if valid.
|
|
|
|
|
Don’t worry about the syntax Ian. Your pseudo-code’s pretty clear and straight forward.
I’m just coding the methods out now. Fingers cross this might be the one!
I don’t know if anyone else has had this problem? I think I’d better post it up once we’ve got it working.
Thanks so much for your help, really appreciate it
|
|
|
|
|
Big, big thank you musefan and Ian! I’ve now got it working brilliantly.
Based on the pseudo-code Ian posted (which worked great after tweeking!) I’ve decided to post the working code incase anyone else out there is experiencing TreeNode’s from hell lol.
"ps, i'm not great with codeproject, so if you know of a better place for me to post this answer, please let me know."
Well here’s the working code…
Add a TreeView control to Form1 and name it treeView1. and then add this code..
<code>
private void Form1_Load(object sender, EventArgs e)
{
TreeNode tn = new TreeNode("Root");
// set PathSeparator to url paths
treeView1.PathSeparator = "/";
// Create any old folders and process
InsertURL(tn, @"mywebsite.com/home/about_us.aspx");
InsertURL(tn, @"mywebsite.com/home/contact_us.aspx");
InsertURL(tn, @"mywebsite.com/home/main.aspx");
InsertURL(tn, @"mywebsite.com/blogs/seo.aspx");
InsertURL(tn, @"mywebsite.com/blogs/linkchecks.aspx");
InsertURL(tn, @"mywebsite.com/blogs/howto/gettheresults.aspx");
//add nodes to treeView
treeView1.Nodes.Add(tn);
}
private void InsertURL(TreeNode root, string url)
{
InsertURL(root, SplitNodes(url), 0);
}
private string[] SplitNodes(string nodeString)
{
char[] delimiter = treeView1.PathSeparator.ToCharArray();
return nodeString.Split(delimiter, StringSplitOptions.RemoveEmptyEntries);
}
private void InsertURL(TreeNode parent, string[] urlParts, int index)
{
// Create the node if it doesn't exist.
CreateNode(parent, urlParts[index]);
// get the next urlPart
index++;
if (index < urlParts.Length)
{
InsertURL(parent.Nodes[urlParts[index-1]], urlParts, index);
}
}
private static void CreateNode(TreeNode treeNode, string name)
{
// Add the node if it don't exist
if (treeNode.Nodes[name] == null)
{
treeNode.Nodes.Add(name, name);
}
}</code>
<div class="ForumMod">modified on Saturday, March 28, 2009 5:57 AM</div>
|
|
|
|
|
How can I insert Picture to Oracle DataBase Oracle ?
can I get C# sample code ?
thank's in advance
|
|
|
|
|
How do I create a new line for my text in the BodyText field of a Dialog in Visual Studio 2005 Installer's User Interface?
In C#: BodyText = "This is line one.\r\nThis is line two."
In VB: BodyText = "This is line one." + vbCrLf + "This is line two."
HTML: BodyText = "This is line one This is line two."
I don't know how to text the VB version, because the BodyText field does not include quotes.
The C# and HTML versions both fail whenever I create my setup files.
|
|
|
|
|
hi
This is my code in which i upload a excel file using file dialog box and store it in to the sql server as table name emp here i creat only one table but problem is that when i run the program secound time all the values again store in same table
so my question is that is possible to create a table at run time in data base NEED HELP or any logic regaring that.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;
using System.Data.SqlClient;
namespace openfi
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog FD = new OpenFileDialog();
FD.Filter = "Excel|*.xls";
if (FD.ShowDialog() == DialogResult.OK)
{
textBox1.Text = " " + FD.FileName;
}
string filename = textBox1.Text;
String connectionString =
"Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source=" + filename + ";" +
"Extended Properties=Excel 8.0;";
OleDbConnection connection = new OleDbConnection(connectionString);
connection.Open();
OleDbCommand selectCommand = new OleDbCommand("SELECT * FROM [sheet1$]", connection);
OleDbDataAdapter dataAdapter = new OleDbDataAdapter();
dataAdapter.SelectCommand = selectCommand;
DataSet dataSet = new DataSet();
dataAdapter.Fill(dataSet);
System.Data.DataTable dataTable = dataSet.Tables[0];
dataGridView1.DataSource = dataSet.Tables[0];
// textBox1.Text = "";
MessageBox.Show(dataGridView1.RowCount.ToString());
connection.Close();
}
private void button2_Click(object sender, EventArgs e)
{
OpenFileDialog FD = new OpenFileDialog();
FD.Filter = "Excel|*.xls";
if (FD.ShowDialog() == DialogResult.OK)
{
textBox2.Text = " " + FD.FileName;
}
string filename = textBox2.Text;
String connectionString =
"Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source=" + filename + ";" +
"Extended Properties=Excel 8.0;";
OleDbConnection connection = new OleDbConnection(connectionString);
connection.Open();
OleDbCommand selectCommand = new OleDbCommand("SELECT * FROM [sheet1$]", connection);
OleDbDataAdapter dataAdapter = new OleDbDataAdapter();
dataAdapter.SelectCommand = selectCommand;
DataSet dataSet = new DataSet();
dataAdapter.Fill(dataSet);
System.Data.DataTable dataTable = dataSet.Tables[0];
dataGridView2.DataSource = dataSet.Tables[0];
// textBox1.Text = "";
MessageBox.Show(dataGridView2.RowCount.ToString());
connection.Close();
}
private void button3_Click(object sender, EventArgs e)
{
this.Close();
}
private void button4_Click(object sender, EventArgs e)
{
string constr="data source=MYSERVER;initial catalog=mo;integrated security=SSPI";
// string constr = "Datasource=Myserver;Initialcatlog=mo;Integrated security=SSPI";
SqlConnection sqcon = new SqlConnection(constr);
SqlCommand scmd = new SqlCommand();
sqcon.Open();
int i = 1;
while (i < (dataGridView1.Rows.Count)-2)
{
string istr = "insert into emp(Personnel_Area,EE_Grp,Employee_Group,ES_Grp)values('" + Convert.ToString(dataGridView1.Rows[i].Cells[0].Value.ToString()) + "','" + Convert.ToString(dataGridView1.Rows[i].Cells[1].Value.ToString()) + "','" + Convert.ToString(dataGridView1.Rows[i].Cells[2].Value.ToString()) + "','" + Convert.ToString(dataGridView1.Rows[i].Cells[3].Value.ToString()) + "')";
MessageBox.Show(istr);
scmd.CommandText = istr;
scmd.Connection = sqcon;
int r;
r = scmd.ExecuteNonQuery();
if (r > 0)
// MessageBox.Show("Record Saved");
i++;
}
if (i > 1)
{
MessageBox.Show("Records saved");
}
}
}
}
|
|
|
|
|
Im not sure exactly what your problem is. Are you trying to create a different table each time you select a file? If you want to know how to create table with SQL then look here[^]
if this is not what you want then please try to describe your problem again
Life goes very fast. Tomorrow, today is already yesterday.
|
|
|
|
|
hi musefan
in my code i create a batabase in which i create a table name ema with 20 fields but problem is thst when i run my program whith specific excel file it store in the table no problem here
but when i run my program secound time with same spcific file or with another excel file all the data send in to same table
which shows privious data as well as new one also. To avoide such problem is there any logic to create a table run time so that whenever program runs it store the all data in to new table to avoide the repitation
of data
|
|
|
|
|
if you dont want the data repeated then you could delete old data first, look at w3schools like the link i gave already to show how to delete.
If you want to create a new table then i already gave you the link to the SQL Query that can do that.
If you dont know what to do form that then i can only assume you dont know what your current code is doing. Basically you need to change your SQL Query String to do the operations you need doing with the database.
Life goes very fast. Tomorrow, today is already yesterday.
|
|
|
|
|
Hello
I've a task to develop an utility that could write an msg file from scratch without using any mapi libraries. This limitation is strict, unfortunately.
So I've studied the structure of the compound file, the red-black trees, etc.
Now I'm trying to make a file with a message. I've copied all the streams that outlook writes to its draft message file. What I need to do is to "attach" a node to this streams tree that would be a storage for the recipient. Moreover, I set the "DisplayTo" stream value. However, when I open the file and move the mouse to the email address in the "To:" form, the recipient's email disappears. I suppose that I've missed something when I was adding the recipient container (a red-black tree with 7 nodes) to the global tree.
I'd like to find out what actions should be made when the recipient is added to the message.
|
|
|
|
|
I was wondering if there is a way to receive the "Now Playing" song information from my media player like the MSN Messenger does.
Note: I'm not using the Windows Media Player.
How does the MSN Messenger receive the "Now Playing" information?
|
|
|
|
|
Well what media player are you using?
I suspect MSN Messenger would first detect the media player being used and then access the information with the approriate api. AFAIK there is no 'system variable' for a song that is being played irrespective of the media player
Life goes very fast. Tomorrow, today is already yesterday.
|
|
|
|
|
I'm using The KMPlayer ...
There is an option called "Enable 'Now Playing' feature for MSN messenger", therefore I assume that there is some player-independent mechanism.
|
|
|
|
|