We use cookies to give you the best experience on our website. If you continue to browse, then you agree to our privacy policy and cookie policy. Image for the cookie policy date

dropdown grid not setting size properly

I have a dropdown grid (called gridDBSub) that during the _Resize event, sets the column widths to utilize the full clientwidth. Works fine, EXCEPT the first time the sub grid is dropped, the ClientRectangle.Width returns the width of the control as it sits on the IDE, but not as it displays. If, however, I close the dropdown and then re-show, the ClientRectangle.Width correctly returns the width of the control as being displayed. Specifically: ClientRectangle.Width = 40 the first time its displayed(although its physically showing much wider), and returns 340 from there on out. (Also, gridDBSub.Width = 42 and 342 thereafter). How can I get the sub-grid to return the actualy width of the control, as it's drawn, the first time the _Resize method is called? I tried calling _Resize manually in the VisibleChanged event, but that had no effect. I've also tried .Refresh, again, no effect. Thanks Eric

1 Reply

AD Administrator Syncfusion Team August 16, 2003 02:32 PM

You can set this last column size in the CurrentCellShowingDropDown event. There is a 8 pixel border on each side of the dropdown window that explains the 16 pixel fudge factor in the code below. Also, on the very first drop, the grid has not been initialize fully yet, so the code gets things like row count and column count from the DataSource (which the code assumes is a DataTable). GridA is the embedded grid in the drop window.
private bool bFirstTime = true;
private void gridControl1_CurrentCellShowingDropDown(object sender, GridCurrentCellShowingDropDownEventArgs e)
{
	GridCurrentCell cc = this.gridControl1.CurrentCell;
	if(bFirstTime && this.gridControl1[cc.RowIndex, cc.ColIndex].CellType == "GridADropCell")
	{
		bFirstTime = false;
		GridA.AllowResizeToFit = false;
		DataTable dt = GridA.DataSource as DataTable;
		if(dt != null)
		{
			int cols = dt.Columns.Count;
			int sbWidth = SystemInformation.VerticalScrollBarWidth;
			int rows = (GridA.EnableAddNew) ? dt.Rows.Count + 1 : dt.Rows.Count; 
			if(rows * GridA.DefaultRowHeight + GridA.Model.RowHeights[0] + 16 
				< e.Size.Height)
			{
				sbWidth = 0;
				GridA.VScrollBehavior = GridScrollbarMode.Disabled;
			}
			int width = e.Size.Width - GridA.Model.ColWidths.GetTotal(0, cols-1) - sbWidth - 16;
			GridA.Model.ColWidths[cols] = width;
		}
	}
}

Loader.
Live Chat Icon For mobile
Up arrow icon