|
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.
|
|
|
|
|
you could look at this[^] it doesnt give much but there are some links you can view if your a member, maybe its worth a sign-up for you, but not for me lol
Life goes very fast. Tomorrow, today is already yesterday.
|
|
|
|
|
I understand that there is something player independent to "broadcast" the "Now playing" information (?), which The KMPlayer as well as the Windows Media Player incoporate. Perhaps WinAMP and other players too. My application should be independent from the underlying player as well.
But thanks for the link anyway, I think I'm going to register ...
Another thought: Can I somehow simulate the part of the MSN-Messenger to which the "now playing" information is send (but without interfering with the original msn messenger)?
|
|
|
|
|
The Media Player is the program responsible for changing the status-text, if I'm not mistaken. There are some guides on writing an MSN-plugin, I believe that the example from the Live-Services even can be used to change the statustext.
Anyway, scroll down to the method "SetMSNMusic" on this[^] page for an example implementation. There's a blog about live messenger addins here[^]
I are troll
|
|
|
|
|
I do no want to write MSN-plugins.
I rather want to have a method "SetMyAppMusic" instead of the method "SetMSNMusic" ...
So how can I "redirect" the SetMSNMusic to my application.
|
|
|
|
|
The message linked to pointed it out. Create a CopyDataStruct, fill it with a magic number of some form, insert a pointer to some specially formatted data and use SendMessage to send it to the MSN messenger window
|
|
|
|
|
give.away wrote: I do no want to write MSN-plugins.
So you want the other way around? Have your application retrieve the name of the song that is currently playing in the KMPlayer?
I are troll
|
|
|
|
|
Exactly!
To make it perfectly clear: I think KMPlayer and Windows Media Player use the same means to "publish" the song info ... I wonder how I can get the info and display it in my app.
modified on Monday, March 30, 2009 9:28 AM
|
|
|
|
|
|
I don't want to write a plugin for the media player either. Especially since it is not necessary.
Let's say: I just want to know how the "now playing" thing works from a theoretical point of view.
I accept that not all players would be supported, but I know for a fact, that it would work for WMP and KMP (there are applications out there for which this works).
So again: What mechanism is used?
Thanks so far!
|
|
|
|
|
give.away wrote: Let's say: I just want to know how the "now playing" thing works from a theoretical point of view.
There is a theoretical player, let's call it "P". This "P" supports plugins. Someone writes a theoretical plugin that sucks up the theoretical songname thats playing in the theoretical player. It then sends this string to some other application, to form some sort of client-server relation between two previously unrelated applications
give.away wrote: So again: What mechanism is used?
Mostly plugin type, but sometimes these new functionalities are being built as custom scripts[^]. Good idea's tend to spread and sometimes make it to be included in a final product.
give.away wrote: Thanks so far!
You're welcome
I are troll
|
|
|
|
|
I want C# code.
I do not want to write or use plugins.
Given a theoretical player P', which has the same mechanism as the Windows Media Player to publish "now playing song information". How would an appliction's code look like to receive the information published by P'?
I hope this clearifies my request.
|
|
|
|
|
give.away wrote: I want C# code.
Write it, or search until you got something that does what you want.
give.away wrote: How would an appliction's code look like to receive the information published by P'?
There isn't an event that you can 'just' hook into. Sorry to say it, but it ain't that simple - this would depend on the "publishing"-mechanism provided by application A. What works with KMPlayer will not neccesarily work with WinAmp or Media Player.
I are troll
|
|
|
|