|
Please post your code with proper format.
Abhijit Jana | Codeproject MVP
Web Site : abhijitjana.net
Don't forget to click "Good Answer" on the post(s) that helped you.
|
|
|
|
|
If your code works at all, it defines two levels, not three. I would imagine you can't do this in a way where you just bind to a datasource, or expect a table to work out the details for you. Your code is hideously inefficient on many fronts. It looks to me like it will add every node at the top level, also.
Christian Graus
Driven to the arms of OSX by Vista.
Read my blog to find out how I've worked around bugs in Microsoft tools and frameworks.
|
|
|
|
|
A tree is a basic data structure and everyone should know to work with that.
When you add a node, you need to find the parent of that node using the parent id. To do this, keep a reference to the root node and iterate recursively until you find the node with the parent id. New node should be added as a child of this node.
Above method has a O(n) complexity where n is the total number of nodes in a tree. An efficient approach will be to keep each node in an associative container with node id as key. When adding each item, look for a TreeNode object in this container. Here is a working code.
void PopulateTreeView(DataTable dt, TreeView tv)
{
Dictionary<int, TreeNode> nodes = new Dictionary<int, TreeNode>();
TreeNode root = null;
foreach (DataRow row in dt.Rows)
{
int parentId = int.Parse(row["Parent_Id"].ToString());
int nodeId = int.Parse(row["Node_Id"].ToString());
string nodeName = row["Node_Name"].ToString();
TreeNode node;
if (nodes.TryGetValue(parentId, out node))
{
TreeNode newNode = new TreeNode(nodeName);
nodes.Add(nodeId, newNode);
node.ChildNodes.Add(newNode);
}
else
{
node = new TreeNode(nodeName);
nodes.Add(nodeId, node);
node.ChildNodes.Add(node);
if (parentId == 0)
root = node;
}
}
tv.Nodes.Add(root);
}
|
|
|
|
|
Good answer bro ..
|
|
|
|
|
|
Hello everyone,
I'm working on a web form and I'm dynamically creating a table on the page with two columns. One column has the text description, and the second has a check box which the user can check or uncheck to indicate that they want that particular item to activated. Because each user will have a different amount of options, I felt it best to build the table rows on the fly after I discover who the user is. The only problem I am fighting with now is that after I build the page and do any post back, the dynamic control is no longer there. Has anyone out there ever tried anything similar? I'm thinking I need to modify the post back somehow to indicate that I want the control to submit the check boxes back to the server so I can process them.
Thanks!
Knowledge is not power, however, the acquisition and appropriate application of knowledge can make you a very powerful individual.
|
|
|
|
|
You need to create the control on every postback. And you need to do it before pageload if you want any sort of viewstate to be restored.
Christian Graus
Driven to the arms of OSX by Vista.
Read my blog to find out how I've worked around bugs in Microsoft tools and frameworks.
|
|
|
|
|
Hi Christian,
Thanks for the input. Kudos on your blog too!
So, I need to use the Page.PreLoad event and build my control there? Right now I'm building the table using data from my database, so if I did that during the page preload, wouldn't that overwrite the post back arguments? Or do I have that backwards? If I create the table during the preload, will the changes in the post back overwrite the results from the database? Sorry if it sounds like a 'you should already know this' type question. I've been reviewing the articles I've found online about the page lifecycle, but it still seems a little vauge to me.
Knowledge is not power, however, the acquisition and appropriate application of knowledge can make you a very powerful individual.
|
|
|
|
|
compninja25 wrote: So, I need to use the Page.PreLoad event and build my control there?
Init will be a good place for dynamic controls.
It looks like you are displaying tabular data. Why don't you try controls like GridView or DataGrid ? GridView has inbuilt checkbox support. In DataGrid , a checkbox can be added by using a template column. If you can do that, you don't need to worry about the viewstate issues.
|
|
|
|
|
Hi Navaneeth,
Indeed, it is tabular data. I've done what you are suggesting before with much larger amounts of data, but because in general the task at hand is only calling for 2 through 5 options to display to the user, I originally thought it would be quicker to just build a quick table and add the few rows. Anyhoo, I did consider using the data grid, but figured I'd like to look into trying to get the dynamic control working first as a way to learn more about the page life cycle and view state. Hopefully it will come in handy somewhere down the line!
Thanks again for your response!
Knowledge is not power, however, the acquisition and appropriate application of knowledge can make you a very powerful individual.
|
|
|
|
|
compninja25 wrote: So, I need to use the Page.PreLoad event and build my control there?
I believe that is correct.
compninja25 wrote: Right now I'm building the table using data from my database, so if I did that during the page preload, wouldn't that overwrite the post back arguments?
you do it precisely so that you can get your postback data. The control needs to exist in order for the system to populate it with data from postback. I'd expect if you want to put your own data in there, you'd do it in prerender, which is always the right place. But for viewstate to work, it needs to be created before page load.
Christian Graus
Driven to the arms of OSX by Vista.
Read my blog to find out how I've worked around bugs in Microsoft tools and frameworks.
|
|
|
|
|
Christian Graus wrote: compninja25 wrote:
So, I need to use the Page.PreLoad event and build my control there?
I believe that is correct.
Boss,
I have one small doubt over here, AFAIK , we need to create the control either Init or PreInit for maintaining the post back. Because Though, LoadViewState and Loadpostback Data Calls before Page_Load() , ASP.NET Creates a control hierarchy only at Init event, based on that the postback data and view state data maintains. So, How it would restore view state and postback data if we create control on Pre_Load() ?.
Abhijit Jana | Codeproject MVP
Web Site : abhijitjana.net
Don't forget to click "Good Answer" on the post(s) that helped you.
|
|
|
|
|
Abhijit Jana wrote: we need to create the control either Init or PreInit for maintaining the post back
I guess whatever u said is correct its better to create dynamic controls on Init according to the Event Cycle.Control developers are mostly rely on this event.Otherwise we need to manually keep the View state.
|
|
|
|
|
Yes, But my question was different. We need to create those dynamic control over Init and Preinit() because of maintaining view state and load postback data. And In Init Event ASP.NET Create a control list to do all the operation during page life cycle.
Suppose you are creating one Dynamic Textbox on Page_Load and done some post back after changing some value of that textbox .As per the Page_Life Cycle goes, View State Data for the newly created text box has been saved because, SaveViewdata() calls after Pre_Render and Before Render() .
Its means My View State data has been saved but, now why that data would not restored ? Though my ViewState data has already saved and LoadView State Data is calling before Page_load. So it should restore the data. But It should not. Beacuse, the reason I have said. In Init() asp.net creats an Control Tree. If you create the control on/after Page_Load, they are not a member of that tree.
There is also some workaround for it.
Abhijit Jana | Codeproject MVP
Web Site : abhijitjana.net
Don't forget to click "Good Answer" on the post(s) that helped you.
|
|
|
|
|
What if I need to create a GridView with dynamic template columns based on the user preference or search conditions?
The controls values cannot be accessed in Page_Init event. Therefore you cannot create dynamic controls in Page_Init event based on the values entered in controls such as Textboxe.
Also in Page_Init, if the current request is a postback, the postback data has not yet been loaded and control property values have not been restored to the values from view state.
But during load, if the current request is a postback, control properties are loaded with information recovered from view state and control state.
Therefore, Page Load is also good place to create dynamic controls.
|
|
|
|
|
Hello abhijit,
Thank you for your input. Do you have any suggestions regarding tutorials or white papers on the page life cycle? I've read through this one click here , but the whole concept is still quite foreign to me. I believe that's why I'm running into this problem; because I cannot yet visualize the 'flow' of the page.
Thanks!
Knowledge is not power, however, the acquisition and appropriate application of knowledge can make you a very powerful individual.
|
|
|
|
|
Hello,
I have an ASP.NET website with a SQL backend. I am using the ASP.NET membership provider model. The site can only be accessed by correct username and password. The login credentials for the website and OWA are identical.
I would like to pass the website login credentials directly to OWA so that OWA can be accessed directly from the webiste without having to re-enter username and password.
I am not certain how to securely pass the website credentials to OWA. I would greatly appreciate any assistance that you can provide.
I am slightly new to ASP.NET. If you need any additional information please let me know.
Thank you in advance for your help.
Allison
|
|
|
|
|
AFAIK you can't. One, OWA is on a different domain and the security credential from your ASP.NET app would mean nothing to OWA. Second, OWA is webased access to Exchange which uses Active Directory. So again, the credentials from your forms based authentication in your web app have no meaning to OWA. The only possibility you have is implementing a Single Sign On (SSO) framework.
only two letters away from being an asset
|
|
|
|
|
No Mark its possible. Even I have done this SSO with my ASP.NET Application with OWA. In my web application where user authenticated from AD and there was an link for Email Box with other staff. When user click on that link, I have done the SSO to directly logged in and moved user to OWA Inbox.
Note : I have done SSO with Exchange Server 2007.
Thanks
Abhijit Jana | Codeproject MVP
Web Site : abhijitjana.net
Don't forget to click "Good Answer" on the post(s) that helped you.
|
|
|
|
|
Abhijit Jana wrote: Even I have done this SSO
Notice in my response "The only possibility you have is implementing a Single Sign On (SSO) framework."
only two letters away from being an asset
|
|
|
|
|
ahayw01 wrote: I would like to pass the website login credentials directly to OWA so that OWA can be accessed directly from the webiste without having to re-enter username and password.
You can do this !
Please let me know the following things,
1. Which version of Exchange Server you are using ? If it is 2007 then I can tell you what are the files need to modifed for SSO. There are only few JS that you need to modifed
2. Does all the used in same domain ?
3. Are you sure AD Password and SQL Server Password are same ? I am little bit confused over here, How any one can maintin the user authentication from AD as well as SQL Server also ? If AD is there, then used AD to authenticate the user for your appliction.
Abhijit Jana | Codeproject MVP
Web Site : abhijitjana.net
Don't forget to click "Good Answer" on the post(s) that helped you.
|
|
|
|
|
I'm very interested on this topic.
Can you send me all info you can give me about SSO on owa 2007?
thank you very much
|
|
|
|
|
I am new to stored procedures. I want to know how to retrieve string values from stored procedures.
Like i created a website in which when user clicks a particular artists image then it's file location is
picked up from sql server. But im not getting way to retrieve from there through procedures.
-----stored procedure-------
create procedure arts
(@Artist nchar(50))
AS
return
(SELECT ret = Location from Artist_loc
where Artist = @Artist
)
in aspx.cs page-----------
string Artist = Request.QueryString["art"];
SqlConnection cn = new SqlConnection(@"Data Source=BLACK_RHYMES-PC\MSSMLBIZ;Initial Catalog=Muzik;Integrated Security=True");
SqlCommand cmd = new SqlCommand();
cmd.CommandText = "dbo.arts";
cmd.Parameters.Add("@Artist",SqlDbType.NChar,50).Value = Artist;
cmd.CommandType = CommandType.StoredProcedure;
cmd.Connection = cn;
i got struck after this what lines should i add to retrieve results.....
*THNX*
|
|
|
|
|
Use Output parameter
Create procedure arts
@Artist nchar(50),
@Ret NVARCHAR(40) OUTPUT
BEGIN
...
...
SET @Ret = yourresult...
END
From code write
SqlParameter oparam = new SqlParameter("@Ret", SqlDbType.NVarchar, 50);
oparam.Direction=ParameterDirection.Output;
cmd.Parameters.Add(oparam);
cmd.ExecuteNonQuery();
Now you will find the return statement in oparam.value . .
|
|
|
|
|
Create procedure arts
@Artist nchar(50),
@Ret NVARCHAR(40) OUTPUT
begin
set @ret = select Location from Artist_loc
where Artist = @Artist
end
it's giving error incorrect syntax near keyword 'select'
|
|
|
|