Jump to content
Xtreme .Net Talk

Recommended Posts

Posted

Hi:

 

I am working on routine that takes in a datatable, and add extended properties to each column, by reading an XMLDocument object. The routine is currently doing a dt = source.copy, and then has a for each statement, in which extended properties are added by reading each XML node. I would like to also include a functionality so I can set sequence for the columns, so the routine returns a datatable with columns sequenced from a sequence attribute in my xml. Can someone please tell me how to set the sequence for each column in a datatable before returning it. Following is the function, that works right now, but doesnt do the sequencing althought it does take in a datatable, adds extended properties by reading xml nodes, and finally returns the datatable with the extended properties What i really need to is before returning the final result set, i would like to also change order of columns, so for eg if i am taking in a table with 3 columns called Column Name, Column City, Column Zip with a default order of name, city, zip instead when returning, i would like to change that column order to zip, name, city. How would i do that? Also I am using an XML file to grab extended properties, so I do have an option of defining an attribute for each column node in the xml file, and possibly set a columnsequence="1" and so forth to distinguish proper sequence when processing. Thanks and this is something which is due asap, and I need some urgent help on it. I would appreciate any help possible on this issue. Thanks.

 

Here is the current code for the function:

 

protected DataTable ApplyColumnMappings(DataTable source, Configuration.Entities entityID)

{

// Create a new row and read in the appropriate rows

// The final data should be the product of the CNSF process

DataTable dt = new DataTable("EntityID:" + entityID.ToString());

string customerId = Context.CompanyNbr;

 

//this is where we are returning the XMLDocument with the following format to look at attributes and other info

//<entitydefinition>

// <columndefinition Hidden="1">

// <columnname>ShipmentID</columnname>

// <columnalias>ShipmentID</columnalias>

// </columndefinition>

// <columndefinition Hidden="0">

// <columnname>InvoiceNumber</columnname>

// <columnalias>InvoiceNumber</columnalias>

// </columndefinition>

// <columndefinition Hidden="1">

// <columnname>CustomerNumber</columnname>

// <columnalias>CustomerNumber</columnalias>

// </columndefinition>

//</entitydefinition>

 

DataFormatter cnsfprocess = new DataFormatter();

//Returing the Xmldocument with the above schema to lookup column alias, whether column is hidden or needs to show etc

XmlDocument doc = cnsfprocess.GetCustomerCNSFData((int)entityID, customerId);

 

if (source.Rows.Count> 0)

{

if (doc != null)

{

XmlElement entityDefinition = doc.DocumentElement;

XmlNodeList nodes = entityDefinition.SelectNodes("//columndefinition");

 

dt = source.Copy();

 

// Loop over each node in the stored XML defintion and add extended properties for columns

 

foreach (XmlNode node in nodes)

{

string columnName = node["columnname"].InnerText;

string columnAlias= node["columnalias"].InnerText;

int hiddenNode = System.Convert.ToInt32(node.Attributes["Hidden"].InnerText);

 

if (hiddenNode == 1)

{

dt.Columns[columnName].ExtendedProperties.Add("Visible", false);

}

else

{

dt.Columns[columnName].ExtendedProperties.Add("Visible", true);

}

dt.Columns[columnName].ExtendedProperties.Add("ColumnAlias", columnAlias);

 

 

}

dt.AcceptChanges();

 

}

 

}return dt;

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...