How do I freeze the first column of the grid? I am able to freeze the headers using StationaryMargins="HeaderAndFooter" property. My grid has 31 columns with date as first column. So when the user scrolls horizontally, the date column should remain pinned/pegged so that the user can make out for which date they are seeing the data. I have attached the screenshot of the grid.
Have been struggling for sometime. Really appreciate any help.
Thanks
(I'm almost sorry I asked. I don't speak XML, and I've never attempted to populate footers dynamically. ;-)
I'm running low on ideas. I would double check to make sure you're doing everything within the correct event handler. I suspect that populating headers, populating footers, and populating rows are best done in two or three different event handlers, but that's just a hunch.
Sorry.
Does anybody else have any ideas?
OK. May be I didnt give you a complete picture of the grid. I am rendering the webgrid based on XML which looks like:
(comments are underlined).
XML: <Root> <Section name="Raw Sewage"> //These form the column group<Parameters><Parameter units="string" code="SP6" type="input" name="Influent Flow Rate"> //This node becomes a column in webgrid<Average>1.0</Average> //This node forms the footer data<Maximum>2.0</Maximum> //This node forms the footer data<Minimum>3.0</Minimum> //This node forms the footer data<Data></Data>//This node forms the footer data<day type="value" number="1">0.3</day> //All these become rows in grid 1-30/31(no. of days in month)<day type="value" number="2">0.2</day><day type="value" number="3">0.1</day>....<day type="value" number="31"></day></Parameter></Parameters></Section></Root>
//****Reading above XML and creating a column for each parameter node :***//
XmlNodeList lstParameter = doc.SelectNodes("//*/*/Parameters/Parameter[@type=\"input\"]");
foreach (XmlNode node in lstParameter){strHeaderText = "<DIV style='width:50px;vertical-align:bottom;WRITING-MODE:tb-rl;filter:fliph flipv;'>(" + node.Attributes["code"].Value.Substring(0, 5) + ")" + node.Attributes["name"].Value.Replace(" ", "<BR>") + "(" + node.Attributes["units"].Value + ")"+ str+ "</DIV>";
UltraGridColumn column = new UltraGridColumn(node.Attributes["code"].Value, strHeaderText, ColumnType.NotSet,null);column.Width = Unit.Pixel(50);this.MROWebGrid.Columns.Add(column);
}
//***Creating Grid rows for number of days in the month***//
DateTime dtFrom = new DateTime();
XmlNodeList lstDays = doc.SelectNodes("//Root/Section[1]/Parameters/Parameter[1]/day");
for (int i = 0; i < lstDays.Count; i++){this.MROWebGrid.Rows.Add();this.MROWebGrid.Rows[i].Cells[0].Value = dtFrom.ToString("M/d/yy,ddd");this.MROWebGrid.Rows[i].Cells[0].AllowEditing = AllowEditing.No;dtFrom = dtFrom.AddDays(1);}
//***Creating the footer:**//
foreach (XmlNode node in lstParameter){
XmlNode AvgNode = node.SelectSingleNode("//Root/Section[@name=\"" + node.ParentNode.ParentNode.Attributes["name"].Value + "\"]/Parameters/Parameter[@code=\"" + node.Attributes["code"].Value + "\"]/Average");
//similarly max, min and data nodes
System.Text.StringBuilder sbFooterText = new System.Text.StringBuilder();sbFooterText.Append("<DIV style='width: 50px;TEXT-ALIGN: left;'>");if(AvgNode.InnerText.Equals("")) sbFooterText.Append(" "); else sbFooterText.Append(AvgNode.InnerText);sbFooterText.Append("<BR><HR>");if (MaxNode.InnerText.Equals("")) sbFooterText.Append(" "); else sbFooterText.Append(MaxNode.InnerText);sbFooterText.Append("<BR><HR>");if (MinNode.InnerText.Equals("")) sbFooterText.Append(" "); else sbFooterText.Append(MinNode.InnerText);sbFooterText.Append("<BR><HR>");if (DataNode.InnerText.Equals("")) sbFooterText.Append(" "); else sbFooterText.Append(DataNode.InnerText);sbFooterText.Append("</DIV>");this.MROWebGrid.DisplayLayout.Bands[0].Columns[intIdx].Footer.Caption = sbFooterText.ToString(); ;intIdx++;
Hope this gives a complete picture of how I am rendering the grid. Please help!!
asairam,
I'm sorry, but I don't see what the problem is.
It looks like you've shown me how you generate the left-most column, with its header and its footer, but as far as I can see, you're not putting anything in the other headers or footers. (Which might explain why they're missing.) Obviously you're doing something to generate row values for more than one column, so I infer that the code samples you've posted are incomplete.
WombatEd,
Wow, When i removed the differences between <RowStyleDefault> and <RowAlternateStyleDefault> tags, all the rows rendered correctly. I thankyou wholeheartedly and appreciate your patience in examining the tags so close. Now the only problem lies with header and footer. I am dynamically creating the column group headers, column headers and columns. In the footer, I am rendering some content using <DIV> and <HR> tags for showing multiple footer information. Attached are the images.
Creating the columns:
UltraGridColumn column = new UltraGridColumn(node.Attributes["code"].Value, strHeaderText, ColumnType.NotSet,null);
this.myWebGrid.Columns.Add(column);
Grouping the column headers:
ch.Caption = objSectionAttributes["name"].Value;
// set the origin to be on the top most level of the header
ch.RowLayoutColumnInfo.OriginY = 0;
ch.RowLayoutColumnInfo.OriginX = j;
// extend the newly added header over 3 columns
ch.RowLayoutColumnInfo.SpanX = GetParamNodesCount(nSection, GridParameterType);
myWebGrid.Bands[0].HeaderLayout.Add(ch);
Creating column footer:
myWebGrid.DisplayLayout.Bands[0].Columns[0].Footer.Caption = "<div style='TEXT-ALIGN: left;'>Average<hr>Maximum<hr>Minimum<hr>Data</div>";
The attached image shows the headers,footers before and after using the UseFixedHeaders="true" property.
The problem is : In place of headers and footer, blank space is rendered (marked by red rectangles in the image attached).
Sorry, If I am confusing you. Please let me know incase you need any more info. I am sure, we can make this work.
Thank you once again.
asairam said:Sure. I thought you are already aware of that behaviour.
I'm just a developer like you, who's been here a little bit longer.
asairam said:The headers are missing.
Before you added the FixedHeaders tags, what did your column headers look like and from where were they generated?
asairam said:cells are realigned in an ugly fashion like a brickwall.
Look at the differences between your <RowStyleDefault> and <RowAlternateStyleDefault> tags. (And their sub-tags.) I see a couple of differences that might impact column alignment.